Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Определение номера тега. (https://javascript.ru/forum/css-html-internet-explorer/18850-opredelenie-nomera-tega.html)

awas 18.07.2011 11:33

Определение номера тега.
 
На странице есть текст, разбитый на какие то теги, например "P".
По клику на странице нужно определить номер тега, на котором был сделан последний клик.
Сейчас я эту задачу решаю так:

<body onClick="f_nomer()">

<p onClick="i=0">Это тег номер 0</p>
<p onClick="i=1">Это тег номер 1</p>
<p onClick="i=2">Это тег номер 2</p>
<p onClick="i=3">Это тег номер 3</p>
<p onClick="i=4">Это тег номер 4</p>

<script>
i=0
function f_nomer(){
alert(i)
}</script>


Или так:


<p onClick="f_nomer(this)" id="0">Это тег номер 0</p>
<p onClick="f_nomer(this)" id="1">Это тег номер 1</p>
<p onClick="f_nomer(this)" id="2">Это тег номер 2</p>
<p onClick="f_nomer(this)" id="3">Это тег номер 3</p>
<p onClick="f_nomer(this)" id="4">Это тег номер 4</p>

<script>
function f_nomer(x){
x=x.getAttribute("id")
alert(x)
}</script>


Но в любом случае приходится нумеровать теги.
Можно ли их не нумеровать, то есть получить решение этой задачи в каком то таком виде:


<p onClick="f_nomer(this)">Это тег номер 0</p>
<p onClick="f_nomer(this)">Это тег номер 1</p>
<p onClick="f_nomer(this)">Это тег номер 2</p>
<p onClick="f_nomer(this)">Это тег номер 3</p>
<p onClick="f_nomer(this)">Это тег номер 4</p>

<script>
function f_nomer(x){
x= . . .
alert(x)
}</script>

Может, в место тега "P" использовать теги с зарезервированным массивом номеров, (например тег "A").

Или от нумерации никуда не уйти?

ksa 18.07.2011 14:31

Цитата:

Сообщение от awas
Но в любом случае приходится нумеровать теги.
Можно ли их не нумеровать

Можно...

<!DOCTYPE html>
<html>
<head>
<style>
</style>
<script>
function Go(event) {
	var o=event||window.event
	o=o.target||o.srcElement
	var i=0
	var op=document.getElementsByTagName('p')
	while (op[i]) {
		if (op[i]==o) {
			alert('Клацнули на элементе № '+i)
			break
		}
		i++
	}
	
}
</script>
</head>
<body>
<body onclick="Go(event)">
<p>Это тег номер 0</p>
<p>Это тег номер 1</p>
<p>Это тег номер 2</p>
<p>Это тег номер 3</p>
<p>Это тег номер 4</p>
</body>
</html>

melky 18.07.2011 14:39

можно не нумеровать

смотри. там всё медленно перекладывается, по переменным. что они содержат и для чего, говорят их имена.
<style>p {background-color:red;margin: 10px;}</style>
<p>Это тег номер 0</p>
<p>Это тег номер 1</p>
<p>Это тег номер 2</p>
<p>Это тег номер 3</p>
<p>Это тег номер 4</p>
<script>
document.onclick =  function(e){
         // на какой элемент клацнули
         var target = e ? e.target : event.srcElement;
         // дети родителя элемента, на который клацнули.
         var parentChildNodes = target.parentNode.children;
         // позиция элемента в списке детей
         var index = Array.prototype.indexOf.call( parentChildNodes, target );

         alert( index );
}
</script>


мм.. ksa, красиво :)

...
while (op[i]) {
....

ksa 18.07.2011 14:53

melky, это не моё... :D У тутошних ребят подсмотрел...

awas 18.07.2011 15:46

Решение мне нужно было для эксплорера.

Вариант от ksa работает и в эксплорере и в опере.

Вариант от melky работает только в опере. В эксплорере пишет "Array.prototype.indexOf" есть ноль или не является объектом. Наверное у меня такая конструкция в эксплорер не была ещё установлена, эксплорер версии 6.0 (люблю эту версию).

Большое спасибо за помощь!

trikadin 18.07.2011 15:59

Цитата:

Сообщение от awas
(люблю эту версию)

НЕНАВИСТЬ OVER 9999!!!!

melky 18.07.2011 17:54

Цитата:

Сообщение от awas (Сообщение 113974)
Решение мне нужно было для эксплорера.

надо было про старика писать заранее...

конечно, мой код не совместим с ним.

только,если костыли в руки дать


Часовой пояс GMT +3, время: 18:13.