1

我需要在一组“容器”div 中搜索类“a2”。如果找到了,什么也不做;如果缺少,请添加它。

原始代码:

<div class="container">
  <div class="a1">
    <span class="Label">Status:</span>
    <span class="Text">Active</span>
  </div>
  <div class="a2">
    <span class="Label">Description:</span>
    <span class="Text">2</span>
  </div>   
</div>

</br>
</br>

<div class="container">
  <div class="a1">
    <span class="Label">Status:</span>
    <span class="Text">Active</span>
  </div>
</div>

</br>
</br>

<div class="container">
  <div class="a1">
    <span class="Label">Status:</span>
    <span class="Text">Active</span>
  </div>  
</div>

这是我的脚本:

$('div.container').each(function(){
   if($(this).children('.a2').length == 0){  
      $('<div class="a2"><span class="Label">Description:</span><span  class="Text">0</span></div>').insertAfter('div.a1');    
      return false; 
   }      
});

在此处查看演示

问题是脚本在不需要的第一个“容器”中插入了“a2”div。有人可以帮我弄清楚我做错了什么吗?

4

3 回答 3

2
.insertAfter('div.a1');

在每个元素之后插入div.a1元素。您想要的是将其附加到当前div.container

.appendTo(this);

还有,不要return false。它将停止整个循环。if已经看守是否添加。

于 2013-01-19T21:50:47.413 回答
1
$('div.container').filter(function(){
     return $('.a2', this).length === 0;
}).append('<div class="a2"><span class="Label">Description:</span><span class="Text">0</span></div>');

或者:

$('div.container').not(":has('div.a2')")
                  .append('<div class="a2"><span class="Label">Description:</span><span class="Text">0</span></div>');

http://jsfiddle.net/xGACz/

于 2013-01-19T21:52:23.633 回答
0

您可以使用该not方法和:has选择器来过滤容器,以便您只拥有那些没有a2元素的容器:

$('div.container').not(':has(> .a2)').append(
  $('<div class="a2"><span class="Label">Description:</span><span  class="Text">0</span></div>')
);
于 2013-01-19T22:07:43.233 回答