原谅标题,不知道该放什么。
我有一些代码:
var links=document.getElementsByTagName('a');
for(var i=0;i<links.length;i++){
var cur=links[i];
cur.onmouseover=function(){alert(i);};
}
我记得以前看过类似的东西,但我不知道如何找到它。如果有人提出这样的问题,我会感到非常惊讶,并希望得到这个链接。
编辑:问题是它总是在循环结束后警告“我”是什么。如果有两个链接,则它们都会发出警报2。
编辑:我记得在这里看到它:http://nathansjslessons.appspot.com/。很少有课程,我建议任何人都没有这样做。
答案 0 :(得分:3)
试试这个:
var links=document.getElementsByTagName('a');
for(var i=0;i<links.length;i++){
var cur=links[i];
cur.onmouseover=function(a){
return function(){
alert(a);
}
}(i);
}
答案 1 :(得分:0)
您实际上可以使用Array.forEach
:
var links=document.getElementsByTagName('a');
[].forEach.call(links, function(cur, i) {
cur.onmouseover = function() { alert(i); };
})
诀窍是使用.call()
,将links
作为this
参数传递。
您需要add .forEach()
for older browsers本身不支持它。
答案 2 :(得分:0)
这是一种更可重复使用的解决方案。记住3 r减少重复使用回收;)它溢出到现实生活中。看看哪个是最快的优化乐趣! http://jsperf.com/speed-test-for-links-script
var links = document.getElementsByTagName('a');
var linksLength = document.getElementsByTagName('a').length //cache the length means quicker for loop
var addMouseOver = function(i){
links[i].onmouseover=function(){
alert(i);
};
} //extract the function
for(var i=0;i<linksLength;i++){
addMouseOver(i);
}