Javascript “的jQuery选择器”;在一个div中,前面有一个class为“的对象,而不是第一个”;

Javascript “的jQuery选择器”;在一个div中,前面有一个class为“的对象,而不是第一个”;,javascript,jquery,html,css,jquery-selectors,Javascript,Jquery,Html,Css,Jquery Selectors,以下是我在HTML中的示例: <span class="a">Test</span> <div class="b"> <div id="x_ABC">ABC must NOT be hidden</div> <div id="x_DEF">DEF must be hidden</div> <div id="x_GHI">GHI must be hidden</div> &l

以下是我在HTML中的示例:

<span class="a">Test</span>
<div class="b">
  <div id="x_ABC">ABC must NOT be hidden</div>
  <div id="x_DEF">DEF must be hidden</div>
  <div id="x_GHI">GHI must be hidden</div>
  <div id="JKL">JKL must NOT be hidden</div>
</div>
但它不符合我的要求。是否有人知道如何仅使用类“a”、“b”和“id^=x”修复选择器


谢谢大家!

属性选择器中的引号是必需的:

$('.a + div.b div[id^="x"]:gt(0)').hide()

出于性能原因,您可能希望使用:


您需要在
x

周围加引号,这只是一个更实用的选择:

$('div.b').each(function(_, b) {
    var $b = $(b);

    if( $b.prev().hasClass('a') ) {
        $b.children().slice(1).filter(function() { return this.id.charAt(0) === 'x' }).hide();
    }
});

我想就这么简单

$('.a + .b > *[id^="x"]:nth-child(n+2)').hide();

好吧,如果没有引号的话,它就起作用了(即使它们是强制性的):
$('.a+div.b div[id^=“x”]').hide()
(它隐藏了所有相关的div)。尽管如此,我还是加上了一句话。。。我发现了我的问题。我修改的站点使用jQuery1.4.4,而您的示例不适用于该旧版本。现在必须更新!谢谢大家!@狡诈:?什么意思?您刚才描述的选择器在值周围加了引号…此外,感谢您提供了使用.slice(1)的性能提示!这是一个伟大的@Guile:啊,是的,在旧的jQuery版本中,它没有引用就可以工作。关于
slice
:在最近的浏览器中,jQuery可以将选择器传递给
querySelectorAll
$('div.b').each(function(_, b) {
    var $b = $(b);

    if( $b.prev().hasClass('a') ) {
        $b.children().slice(1).filter(function() { return this.id.charAt(0) === 'x' }).hide();
    }
});
$('.a + .b > *[id^="x"]:nth-child(n+2)').hide();