jquery:排除子项

jquery:排除子项,jquery,Jquery,我知道这已经被问了很多次了,我尝试了所有的建议,阅读了所有关于不同选择器的内容,等等,但是没有任何东西对我有效 给定以下HTML片段: <div class="class1"> <p> <a>link</a> </p> <div class="class2 class3"> <p> <font> <a>link2</a>

我知道这已经被问了很多次了,我尝试了所有的建议,阅读了所有关于不同选择器的内容,等等,但是没有任何东西对我有效

给定以下HTML片段:

<div class="class1">
  <p>
   <a>link</a>
  </p>
  <div class="class2 class3">
    <p>
      <font>
        <a>link2</a>
      </font>
    </p>
  </div>
</div>
等等


我不知道是因为第二个div有两个类名,还是因为第二个div的标记不是第二个div的直接子类(例如,它们周围有字体标记等),但我无法排除第二个div。

您是否尝试过子选择器

div.class1 > p > a
将仅选择
class1
的直接后代

如果您需要更广泛的规则,我认为您只需要在其中一个示例中添加一个空格:

$(".class1 :not(.class2) a")
根据评论更新:这项工作:

$(".class1 > :not(.class2.class3) a").css('border','1px solid red');

当然,这取决于您的具体需求,但这是可行的-它会直接选择div、它下面的
,然后选择其中的链接:

$('.class1 > p a')
要查找除嵌套在另一个
中的链接以外的所有链接,您可以尝试以下操作:

var class1 = $(".class1");
var badLinks = class1.find('div a'); // or .class2 a, .class3 a
var goodLinks = class1.find('a[href$=jpg]').not(badLinks);
在任何级别查找类中的所有链接,并删除包含在另一个
中的链接。如果你写得再短一点,你会用:

class1.find('a[href$=jpg]').not(class1.find('div a'));
如果将而不是与元素名称结合使用,则只能获得所需的元素,例如:

.class1 > p > a

终于找到了一个可以接受的解决方案

$('.class1').find('a[href$=".jpg"],a[href$=".png"],a[href$=".gif"]').each(function(){
if($(this).parents('div').attr('class') == 'class1'){do whatever}});

我没有别的办法。不过,感谢您的帮助,这里的许多答案都会起作用,但是第一个div可以在第二个div之前包含任意数量的子元素(或者根本不包含),第二个div可以在我试图过滤掉的a标记出现相同问题之前包含任意数量的子元素,如果有任何数量的元素可能会造成阻碍,我的解决方案是:

$('.class1').find("a").not(".class2 a, .class3 a").whatever;

基本上,获取所有内容,然后删除任何应该“排除”的内容。

内容是动态的,class1的子项可以是除另一个div之外的任何html标记,但我可能能够解决一些问题that@null-如果结构很复杂,你可能会想要这样的东西:为了使它更复杂,我不只是拿任何标签,在选择了div类之后,我使用了.find('a[href$=”.jpg“]),我想要Okay$('.class1>p')中的a标记。find('a[href$=”.jpg“])在.class1的第一个子元素是p时可以正常工作。是否有一种方法可以迭代给定的标记数组及其子元素,包括所有内容,除了任何div子项之外的所有排列?@kobi,这个最新版本的问题是它不会拾取class1.find('div p'),其中包含一个我不想包含的链接仅供参考-字体标记已弃用:
:not(.class2)
可以匹配
标记,所以我很确定这是行不通的。@Kobi它应该停在
class2
div上。尽管如此,我不确定$(“.class1:not(.class2.class3)”)会破坏整件事,使用class2/class3中的一个并不排除第二个div@Gert很高兴知道@空
:不是(.class2.class3)
怎么样?这是正确的表示法。$(“.class1:not(.class2.class3)”)不排除div class=“class2 class3”
$('.class1').find("a").not(".class2 a, .class3 a").whatever;