0

尝试创建一种方法来计算开始和结束元素之间匹配元素的数量。没有什么太狂野了。原来这两个console.log在我中间识别next_itemend_elem在无限循环中使我的浏览器崩溃。理想情况下,我试图在 while 循环调用中使用它,这样我就可以防止它通过end_elemdo 捕获它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;
  },
4

2 回答 2

1

将 JQuery 对象声明为全局(即没有var)似乎会使某些浏览器感到困惑,因此将它们声明为本地函数总是一个好主意。

注意:我很高兴这些信息有所帮助,但如果有人能真正解释为什么会发生这种情况,他们应该得到解决方案标记,而不是我。

于 2012-08-23T16:37:24.177 回答
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() < end_elem.index())”。

于 2012-08-24T08:45:58.563 回答