4

私のプロジェクトでは。div親divに存在する他の隣接する番号に特定の番号がすでに存在するかどうかを確認しようとしています。

  //generated dynamically using jQuery
  <div> //parent div
      //many div's
      //one of the child div is selected by the user.
  </div>
  <div> //another parent div
     //my function is checking one of these div's instead of the above, rarely
  </div>

以下のコードを使用しました。しかし、時々(めったに)divチェックしたくない別の親の子要素を選択します(私はクロームのデバッガーでチェックしました)。また、関数が正しい親divを選択した場合でも、ユーザーが選択したのと同じ子div要素を常に選択している場合があります。

jQuery

function checkInGroup(){
    var selectedDiv = $('#' + _selectedDivId); //updated after engineer's comment
    selectedDiv.parent("div").children().each(function(){
        debugger;
        if(this !== selectedDiv[0]){ //selecting the same div
            var self = $(this);
            if(self.text() == _randomNumber){
                debugger; //never executing
                //do some function here
            }
        }
    });
}

編集: jsbinで正常に動作しているのに、なぜコードが動作しないのかわかりません。なぜそうなのかを確認する必要があります。常に同じユーザーが選択したdivで確認していますか?したがって、関数はifステートメントに入りません。

debuggerifステートメント内に存在するwhichは実行されません。また、各関数ループは、同じ選択されたdivで1回だけ発生します(したがって、関数はifステートメントに入力されません)

これがjsfiddleです

4

4 に答える 4

2

$ .each()関数には、$。each([Array]、index、element)の実際のシグネチャがあります。あなたの場合:

function checkInGroup(){
    var selectedDiv = $('#' + _selectedDivId);
    $.each(selectedDiv.parent("div").children(), function(index, element){
        debugger;
        if($(element) !== selectedDiv){ //selecting the same div
            if($(element).text() == _randomNumber){
                //do some function here
            }
        }
    });
}
于 2013-01-22T12:18:24.837 に答える
2

試す:

 selectedDiv.parent("div").children().not(selectedDiv).each(function(){
   //your code 
 });
于 2013-01-22T12:17:13.453 に答える
1

兄弟を使用します。

$('#' + _selectedDivId).siblings().each(function(){

});

更新しました:

selectedDiv idは実際にはdivではなく、ボタンIDです。それが問題です。以下のようにコードを変更してください。

   selectedDiv.parent("div").parent("div").find("button").each(function(){

デモ

于 2013-01-22T12:21:57.617 に答える
0

selectedDivあなたの例では配列かもしれません。

このように2つのjQueryオブジェクトを比較することはできないと思います。

データ属性の使用を検討できますか?

例えば

var selectedDiv = $('#' + _selectedDivId);
selectedDiv.data('selected', true);

それから

selectedDiv.parent("div").children().each(function(){
    debugger;
    if($(this).data('selected') !== true){ //selecting the same div
        if($(this).text() == _randomNumber){
            //do some function here
        }
    }
});

selected選択を解除するときは、divでfalseに設定することを忘れないでください。

これを行うにはおそらくもっと効率的な方法がありますが、これはうまくいくはずです。

于 2013-01-22T12:19:04.543 に答える