2014-10-20 2 views
0

Допустит, у меня есть следующий код:Как получить расположение тега в JavaScript без изменения DOM

<body> 
    <a>1</a> 
    <a>2</a> 
</body> 
<script> 
var as = document.getElementByTagName('a'); 
for(var i=1; i<=as.length; i++) { 
    as[i].onclick = function(){ 
    alert(i); 
    } 
} 
</script> 

При нажатии на любом из a тегов предупредят 2! Я знаю почему, но как мне его передать?

+1

Он начинается с 0 , замените 'i = 1' на' i = 0' – Superdrac

+1

Нет функции getElementByTagName, но getElementsByTagName. – dfionov

ответ

5

нужно добавить некоторое закрытие, чтобы сохранить значение I, потому что onlick функция будет вызвана после того, что цикл завершается и значение I изменилось

as[i].onclick = (function(i2){ 
    return function(){ 
     alert(i2); 
    }; 
})(i); 
+0

Закрытие. Это то, что мне нужно было услышать. –

1

Это вопрос обзорное. Ваш цикл for будет завершен до того, как будут зарегистрированы какие-либо клики, поэтому i всегда будет 2. Вы можете избежать этого с помощью функциональной forEach петли, которая сохранит свой объем:

var as = document.getElementsByTagName('a'); 
[].forEach.call(as, function (el, i) { 
    el.onclick = function(){ 
    alert(i); 
    } 
}) 
0

This даст вам текущее положение тега в HTML, можно использовать следующий код:

$('a').on('click',function(){ 
console.log($(this).index()); 
}); 
+0

Говорит ли OP, что он работает с jQuery? – Superdrac

Смежные вопросы