Javascript FOR-getElementByName和i值
我的代码如下:Javascript FOR-getElementByName和i值,javascript,html,Javascript,Html,我的代码如下: for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++){ document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function(){ alert(document.getE
for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++){
document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function(){
alert(document.getElementById('test').getElementsByTagName("li")[i].innerHTML);
}
}
for(var i=0;i
HTML:
- 测试
- 测试2
- 测试3
- 测试4
JSfiddle:
“i”总是被分配最后一个值,然后不起作用。如何解决 看起来您想要的是
querySelectorAll
:
var elems = document.querySelectorAll("#test ul li");
for (var i = 0; i < elems.length; i++) {
elems[i].onmouseover = function() {
console.log("See?");
}
}
演示:问题在于范围界定。如果在循环内创建函数,则循环变量将始终具有其最后一个循环值。基本上,循环是执行的,但是函数声明中的变量在函数被调用之前不会被计算,此时“i”等于最后一个值。可以使用闭包使变量立即解析
for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++){
(function(i) {
document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function(){
alert(document.getElementById('test').getElementsByTagName("li")[i].innerHTML);
};
})(i);
}
for(var i=0;i
我也同意tymeJV的观点,您应该首先存储元素,而不是重新选择它们。您需要缓存I
for(var i =0; i < document.getElementById('test').getElementsByTagName("li").length; i++)
{
var _i = i;
document.getElementById('test').getElementsByTagName("li")[i].onmouseover= function()
{
alert(document.getElementById('test').getElementsByTagName("li")[_i].innerHTML);
}
}
for(var i=0;i
//甚至更好
var elements = document.getElementById('test').getElementsByTagName("li");
for(var i =0; i < elements.length; i++)
{
elements[i].addEventListener('mouseover', function()
{
alert(this.innerHTML);
});
}
var elements=document.getElementById('test').getElementsByTagName(“li”);
对于(var i=0;i
以下是一个非常简洁的解决方案,可在Firefox和IE9内部的JSFIDLE中使用:
var elems = document.getElementById("test").getElementsByTagName("li");
for(var i =0; i < elems.length; i++){
elems[i].onmouseover= function(e){
console.log(this.innerHTML);
console.log(e);
}
}
var elems=document.getElementById(“test”).getElementsByTagName(“li”);
对于(变量i=0;i
由于不知道您打算在mouseover事件中做什么,我建议您传入该事件,以便您可以将其引用为“e”。如果您真的想使用javascript而不是JQuery,您应该这样做
var ul = document.getElementById("test");
var li = ul.getElementsByTagName("li");
for(var i =0; i <li.length; i++){
li[i].onmouseover= function(){
alert(this.innerHTML);
}
}
var ul=document.getElementById(“测试”);
var li=ul.getElementsByTagName(“li”);
for(var i=0;i某个地方有只小猫在哭。不清楚你在问什么…第一个技巧不起作用;函数中的局部变量仍在访问共享的“i”从封闭范围。你是对的。我应该将var_I=I;放在事件侦听器之外。好吧,检查其他答案中的闭包代码-JavaScript范围与其他语言中的范围不一样。抱歉,我赶时间。闭包会导致函数立即执行,因此它需要在赋值之外,否则,alert立即开火。
var elems = document.getElementById("test").getElementsByTagName("li");
for(var i =0; i < elems.length; i++){
elems[i].onmouseover= function(e){
console.log(this.innerHTML);
console.log(e);
}
}
var ul = document.getElementById("test");
var li = ul.getElementsByTagName("li");
for(var i =0; i <li.length; i++){
li[i].onmouseover= function(){
alert(this.innerHTML);
}
}