jQuery:选择不是某个类的后代的所有元素

时间:2011-12-15 17:11:40

标签: jquery jquery-selectors

<div class="container" id = "0" >
   <div class="x" id = "1"> 
      <div id = "2"> 
        <p id = "3">
          <span id = "4" >text</span> 
        </p>
      <div>
    </div>

    <div id="5">
      <div id="6"> 
        <p id="7">
          <span class="x" id="8" >text</span> 
          <span id="9">text</span> 
        </p>
      <div>
    </div>
<div>

你能帮我选择所有元素吗?

  • 是'.container''
  • 的后代
  • 不是'.x'的后代
  • 本身没有“.x”类。

查看上面的HTML;它应该选择 5,6,7和9

元素
  • 元素1具有“X”类
  • 元素2是元素与类“X”(元素1)
  • 的直接子元素
  • 元素3和4是元素与类“X”(元素1)
  • 的后代

元素8有“X”类


我有这个选择器,但它继续选择带有“X”类的元素的后代(深儿)

var elements = $('.container').find().parents(':not(.X)').andSelf().filter(':not(.X)');

2 个答案:

答案 0 :(得分:16)

这应该这样做:

$('.container').find(':not(.x):not(.x *)');

编辑:再次恢复为第一次修订。我认为它不起作用,但你的HTML中有一个错误,它使#1成为所有元素的父级,因此没有选择。

<div class="container" id = "0" >
    <div class="x" id = "1"> 
      <div id = "2"> 
        <p id = "3">
          <span id = "4" >text</span> 
        </p>
      <div> <!-- <-- must be a closing div tag -->
    </div>

    <div id="5">
      <div id="6"> 
        <p id="7">
          <span class="x" id="8" >text</span> 
          <span id="9">text</span> 
        </p>
      <div> <!-- <-- must be a closing div tag -->
    </div>
<div> <!-- <-- must be a closing div tag -->

答案 1 :(得分:1)

使用通配符

$(".container :not(* .x)")

$(":not(* .x)", ".container")

可能会有效。