尝试创建一个方法来计算起始元素和结束元素之间匹配元素的数量。没什么太疯狂了。事实证明,我在中间标识next_item
和end_elem
的两个console.log在无限循环中崩溃我的浏览器。理想情况下,我正在尝试在while循环调用中使用它,这样一旦它通过end_elem
捕获它就可以阻止它超过next_item.index() < end_elem.index()
,但这显然每次都会破坏我的浏览器。我不明白为什么。
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;
},
答案 0 :(得分:1)
将JQuery对象声明为全局(即没有var
)似乎会混淆某些浏览器,因此将它们声明为函数本地是一个好主意。
注意:我很高兴这些信息有所帮助,但如果有人能够解释为什么这会发生,那么他们应该得到解决方案标记,而不是我。
答案 1 :(得分:1)
您的函数find_the_count_of_elements_between_two_elements似乎只适用于兄弟姐妹。那是因为你使用..index()来确定元素在DOM中的位置 - 相对于它的兄弟姐妹。
在这种情况下,您可以更便宜地实现相同的目标。我将使用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选择作为开始和结束。
顺便说一句:您编辑了代码示例吗? 我没有看到任何“if(next_item.index()&lt; end_elem.index())”。