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我不想检查的另一个 parent 的子元素(我用 chrome 中的调试器检查过)。有时即使函数选择了正确的父 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 发生一次(因此该函数未进入 if 语句)

这是jsfiddle

4

4 回答 4

2

尝试:

 selectedDiv.parent("div").children().not(selectedDiv).each(function(){
   //your code 
 });
于 2013-01-22T12:17:13.453 回答
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 回答
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在您的示例中可能是一个数组。

我不认为你可以像这样比较两个 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 回答