jQuery删除子元素不在的元素

时间:2014-07-31 19:07:38

标签: jquery html css

所以我试图隐藏那个tr中的锚没有id为x的表行。

我有这个,但它不起作用,选择错误或不可能这样做?

<table><tr><td><a id="x">X</a></td></tr></table>
...
$("table tr:not(td a#x)").hide();

由于

6 个答案:

答案 0 :(得分:2)

您必须将x ID更改为班级。在页面上不可能有超过1个相同的ID。但是使用课程,你可以使用filter来摆脱你不想要的结果。 !$('td a', this).hasClass('x');会在tr中找到td a并检查它是否有类。接下来它会返回相反的结果,因为您只想隐藏拥有tr的{​​{1}}。

a.x

答案 1 :(得分:2)

1)ID不能在单个html页面上重复使用多次 2)改为使用类

您可以使用CSS:not或jQuery .not()作为选择器。

这个jsperf link CSS证明了性能方面:不是选择器更快。

$('table tr:not(:has(".x"))').hide();

主选择器使用CSS :not选择器选择所有表tr,然后使用:has jQuery选择器检查是否有任何子元素具有.x类。我建议你编辑你的html结构,除非你在一个html页面上只有一个实例,否则不要使用id。

这类似于用户&#39; underfined&#39;回答,但它稍快。

我为你创建了一个例子:

DEMO:http://jsfiddle.net/7ceRx/4/


如果您想使用ID而不是类:

 $('table tr:not(:has("#x"))').hide();

答案 2 :(得分:2)

您还可以使用not方法和:has选择器:

$("table tr") // all `tr` elements
  .not(':has(#x)') // not having `#x` descendant
  .hide();

答案 3 :(得分:0)

您不能使用具有相同值的多个ID。使用类

所以:

<table><tr><td><a class="x">X</a></td></tr></table>

然后您可以使用以下方法轻松隐藏它们:

$('a:not(.x)').closest('tr').hide();

答案 4 :(得分:-1)

或者你可以通过DOM,.closest();

$("#x"). closest('tr').hide(); // this will hide the entire row 

答案 5 :(得分:-2)

我找到了解决方案

HTML

 <table border="1" style="border:1px solid #FFCC00;color:#000000;width:100%" cellpadding="3" cellspacing="3">
<tr>
    <td><a id="x">Table Cell 11</a></td>
    <td><a id="x">Table Cell 12 </a></td>
</tr>
<tr>
    <td><a id="y">Table Cell 21 </a></td>
    <td><a id="x">Table Cell 22</a></td>
</tr>
<tr>
    <td>Table Cell</td>
    <td>Table Cell</td>
</tr>
 </table>
 <br>
 <button id="button">Hide all a tag with id=x</button>

JS

 $(document).on('click', 'button', function(e){
  // $('a#x').html($('a#x').text(' '));
   $("a#x").hide();
 //console.log('onClick func');    
})

HERE IS THE DEMO