jQuery eq()导致无限迭代
jQuery eq() caused infinite iteration
当我试图在代码中总结时,我发现当我写这样的东西时:
var $elements = $('div');
for ( var i = 0, $element; $element = $elements.eq(i); i++ ) {
$element.text( 'Hello' );
}
循环永远不会结束。我想知道,为什么会发生这种情况。如果我在条件内调用函数,或者jQuery没有返回准确的数据,因此循环条件无法识别当前索引,这会导致错误吗?
.eq()
方法总是返回一个jQuery对象。如果指定了一个不存在的索引,则会得到一个空的jQuery对象。但是任何对象都是truthy,所以即使在i
经过最后一个元素之后,循环条件也总是truthy。所以,无限循环。
你需要测试长度:
for ( var i = 0, $element; i < $elements.length && ($element = $elements.eq(i)) ; i++ )
但是为什么不直接使用.each()
方法进行循环呢?
将当前元素指定为循环条件的模式确实适用于数组:
for ( var i = 0, element; element = anArray[i]; i++ )
假设没有元素具有伪值,因为当i
达到an array.length
时,anArray[i]
将是伪的undefined
。
因为$
和$elements.eq
将始终返回一个对象,即使没有匹配查询的对象。该对象的长度将为0,但它仍然是一个对象。物体是真实的价值观。
function log(msg) {
document.querySelector('pre').innerText += msg + ''n';
}
log($('p').eq(0)); // First p element
log($('p').eq(1)); // Second p element
log($('p').eq(2)); // Third p element
log($('p').eq(3)); // No matching p element but look at what we get
if ($('p').eq(9001)) {
log('Yup, still a truthy value');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>1</p>
<p>2</p>
<p>3</p>
<pre></pre>
相关文章:
- 如何在javascript中迭代数字列表
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 如何迭代Array.prototype函数
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 在ejs-partial中对JSON对象进行迭代
- 如何在DataTables 2.1中迭代对象数组
- 使用递归属性迭代保留属性结构
- 正在停止.在jquery中的特定时间间隔内,每次迭代的每次执行
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 主干-从模板中迭代的集合中获取特定的模型
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 什么's是在javascript中迭代项的最佳方式
- 为什么这只是迭代 HTMLCollection 的奇怪元素
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- jQuery-迭代不正确?(太长,无法执行)
- jQuery eq()导致无限迭代
- 列表迭代器中的无限循环
- 为什么这个while循环产生一个无限迭代