0

開始要素と終了要素の間で一致する要素の数をカウントするメソッドを作成しようとしています。ワイルドすぎるものはありません。途中で2つのconsole.logを識別next_itemend_elem、ブラウザを無限ループでクラッシュさせていることがわかりました。理想的には、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;
  },
4

2 に答える 2

1

JQueryオブジェクトをグローバルとして(つまり、なしでvar)宣言すると、特定のブラウザーが混乱するように思われるため、関数に対してローカルとして宣言することをお勧めします。

注:この情報がお役に立ててうれしいですが、誰かが実際にこれが発生する理由を説明できるのであれば、私ではなく、解決策のマークに値します。

于 2012-08-23T16:37:24.177 に答える
1

関数find_the_count_of_elements_between_two_elementsは兄弟に対してのみ機能するようです。これは、.. index()を使用して、兄弟に対するDOM内の要素の位置を決定するためです。

その場合、同じ目標をはるかに安く達成できます。より一般的であるため、class_to_countの代わりにfilterを使用します。

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 に答える