从getElementsByClassName集合中获取索引值

时间:2015-04-21 14:53:45

标签: javascript

如何获取getElementsByClassName集合的索引值。

function clickSchedule(){
    var t = document.getElementsByClassName("table")    
    for(i=0; i<=t.length; i++)
    {
        t[i].onclick= function() {

            // get the index value of the node when clicked something like this
            // alert(t[i].index)
            // already tried alert(t[i]) returning undefined.
            // already tried alert(t.item(i)) returning NULL.
    };
    }
}
window.onload = function(){
    clickSchedule();    
};

1 个答案:

答案 0 :(得分:2)

第一个问题是你需要在循环中修复你对<=的使用,这会导致你的循环迭代一次太多次(解释未定义的消息)。更改为<而不是<=

for(i=0; i<t.length; i++)

看来你只想在click事件中获取元素的句柄。在这种情况下,this上下文将引用单击的元素。

t[i].onclick= function() {
    console.log( this );
}

如果你真的需要索引,那么你需要一个闭包,因为否则i将始终是最后一次迭代,直到任何点击事件发生。

关闭示例:

for(i=0; i<t.length; i++){
    (function(protectedIndex){
        t[i].onclick= function() {
            console.log( t[protectedIndex] );
        }
    })(i);
}

注意:document.querySelectorAll的浏览器支持率高于document.getElementsByClassName,因此您可以更改为:

var t = document.querySelectorAll(".table")