为什么这会造成一个无休止的循环并使我的浏览器崩溃
Why would this create an endless loop and crash my browser?
尝试创建一个方法,该方法将计算起始元素和结束元素之间的匹配元素数量。没有什么太疯狂的。结果发现,我中间的两个console.log标识next_item
和end_elem
,使我的浏览器在一个无休止的循环中崩溃。理想情况下,我试图在while循环调用中使用它,这样一旦它通过执行next_item.index() < end_elem.index()
捕获它,我就可以防止它通过end_elem
,但这显然每次都会破坏我的浏览器。我不知道为什么。
find_the_count_of_elements_between_two_elements: function(class_to_count, start_elem, end_elem) {
var number_of_times = 0;
var start = 0;
var end = 1;
next_item = start_elem.nextAll().slice(start, end);
while ( start < 6 ) {
// console.log(next_item.index() < end_elem.index() );
console.log("next_item : " + next_item.index() );
console.log("end_elem : " + end_elem.index());
if ( next_item.hasClass(class_to_count) ) {
number_of_times++;
};
start++;
end++;
next_item = start_elem.nextAll().slice(start, end);
console.log(next_item);
};
return number_of_times;
},
将JQuery对象声明为全局对象(即没有var
)似乎会混淆某些浏览器,因此最好将它们声明为函数的本地对象。
注意:我很高兴这些信息有所帮助,但如果有人能真正解释为什么会发生这种情况,他们应该得到解决方案标记,而不是I。
在这种情况下,你可以以更低的价格实现同样的目标。我将使用filter而不是class_to_count,因为它更通用。
function count_matching_elements_between(filter, start_elem, end_elem) {
return $(start_elem).nextAll(filter).filter($(end_elem).prevAll()).length;
}
要查找具有特定类的元素,可以使用:
count_matching_elements_between('.myClass', '#myStart', '#myEnd');
或者提供显式DOM节点或jQuery选择作为开始和结束。
BTW:你编辑你的代码示例了吗?我在那里没有看到任何"if(next_item.index()<end_elem.index)"。
相关文章:
- 为什么setTimeout适用于无休止的递归调用
- 使用SetInterval进行无休止循环
- 没有for的Javascript无休止循环
- Javascript无休止的循环毫无原因地发生
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- 使用click()方法是在创建一个无休止的循环
- Jquery无休止滚动加载来自其他站点的内容
- HTML5历史API弹出状态重新加载野生动物园刷新页面无休止
- Tumblr 无限(无休止)滚动/自动页面脚本问题
- 为什么我的程序发出无休止的 GET 请求
- 无休止的控制台日志,javascript不会离开函数requestAnimationFrame
- 浏览器中的无休止的页面更新(javascript)
- 使无休止的jQuery简短而简单
- 创建按钮时陷入无休止的循环
- svg围绕其中心无休止地旋转形状
- 使用胡子模板实现无休止滚动时出现DOM异常8错误;jquery砌石
- url检查正则表达式在浏览器中无休止地运行
- 无休止的滚动和使用GET方法来过滤内容
- 无休止的滚动和过滤JSON数据
- 单调的任务陷入无休止的循环