Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery eq()导致无限迭代_Javascript_Jquery_Loops_Iteration - Fatal编程技术网

Javascript jQuery eq()导致无限迭代

Javascript jQuery eq()导致无限迭代,javascript,jquery,loops,iteration,Javascript,Jquery,Loops,Iteration,当我试图在我的代码中总结一些东西时,我发现当我写这样的东西时: var $elements = $('div'); for ( var i = 0, $element; $element = $elements.eq(i); i++ ) { $element.text( 'Hello' ); } 循环永远不会结束。我想知道,为什么会这样。如果我在条件内部调用函数,或者jQuery只是不返回准确的数据,因此循环条件无法识别当前索引,那么会导致错误吗 因为$和$elements.eq将始终

当我试图在我的代码中总结一些东西时,我发现当我写这样的东西时:

var $elements = $('div');
for ( var i = 0, $element; $element = $elements.eq(i); i++ ) {
    $element.text( 'Hello' );
}

循环永远不会结束。我想知道,为什么会这样。如果我在条件内部调用函数,或者jQuery只是不返回准确的数据,因此循环条件无法识别当前索引,那么会导致错误吗

因为
$
$elements.eq
将始终返回一个对象,即使没有与查询匹配的内容。该对象的长度为0,但它仍然是一个对象。对象是真实的值

函数日志(msg){
document.querySelector('pre')。innerText+=msg+'\n';
}
log($('p').eq(0));//第一p元素
log($('p').eq(1));//第二p元素
log($('p').eq(2));//第三p元素
log($('p').eq(3));//没有匹配的p元素,但看看我们得到了什么
如果($('p')。等式(9001)){
log(“是的,仍然是真实的值”);
}

一,

二,

三,

方法
.eq()
总是返回jQuery对象。如果指定一个不存在的索引,则会得到一个空的jQuery对象。但是任何对象都是真实的,因此即使
i
经过最后一个元素,循环条件也始终是真实的。所以,无限循环

您需要测试长度:

for ( var i = 0, element; element = anArray[i]; i++ ) 

假设所有元素都没有错误的值,因为当
i
到达
数组时,长度
那么
anArray[i]
将是
未定义的
,这是错误的。

i
声明中,您也将$element重新分配给了我您对$elements的意思是什么。eq(i)??它的输出应该是什么?
$element=$elements.eq(i)
应该返回集合中包装在jQuery对象中的
i
th元素。我很确定OP希望在没有
I
th元素后它会失败。我的输出应该是每个div元素的jQuery对象。我试图避免在循环中指定变量,而不是在条件中。当然,我可以通过元素数组进行迭代,但是我仍然必须创建一个jQuery对象来访问jQuery方法。为什么要重新创建jQuery的每个方法?赋值
I<$elements.length&&$element=$elements.eq(I)
中的左侧无效。@kindisch-Oops。我加了括号。建议改用
.each()
。我喜欢尽可能少地使用jQuery,因为它会减慢速度。你会说,在这种情况下,
.each()
会更快吗?使用
.each()
我仍然必须分配jQuery对象。谢谢你们两位。nnnnnn和Mike C.我有点纠结谁应该得到奖励,但我最终在nnnnnn,因为他把樱桃放在蛋糕上作为他的例子如何在条件内正确使用jQuery
.eq()
。each()比普通for循环慢,但慢多少取决于你在循环中做什么。在大多数“正常”情况下,用户不会注意到差异。我假设您真正的代码所做的不仅仅是将相同的文本分配给每个元素(因为如果您只想这样做,您可以使用
$elements.text(“hello”)
)在一行中完成),但有时在.each()循环中,您不需要将单个元素作为jQuery对象,您可以直接访问
此.value
或其他属性。谢谢你们两位。nnnnnn和Mike C。我有点纠结谁应该得到奖励,但我最终还是在nnnnnn,因为他在他的例子中提到了如何在条件中正确使用jQuery
.eq()
for ( var i = 0, element; element = anArray[i]; i++ )