如何获得不是特定节点后代的后代

时间:2014-04-15 17:00:00

标签: javascript jquery jquery-selectors

我正在使用jquery,并且我希望获得特定类型的所有元素,这些元素不是特定类型节点的后代。

E.g。我的DOM就像:

<div id='idthatiknow'>
    <div>
        <span>good1</span>
    </div>
    <div>
        <span>good2</span>
    </div>
    <p>
        <span>bad</span>
        <div>
            <span>bad</span>
        </div>
    </p>
<div>

我需要一个选择器,它会让我good1good2而不是bad。但是,我需要从我认识的身份开始。所以我在想,像#idthatiknow not(p) span,但这不起作用。请记住,我的实际dom要复杂得多 - 这只是一个简化的例子。

那么,有没有办法检索作为X的后代而不是Y的后代的所有元素?

2 个答案:

答案 0 :(得分:1)

您可以随时过滤父母

$('#idthatiknow span').filter(function() {
    return $(this).closest('p').length === 0;
});

FIDDLE

请注意,它不适用于最后一个,因为DIV不能在P内,因此它会被浏览器移动。< / p>

答案 1 :(得分:0)

有人发布了答案,但随后将其删除了。我正在重新发布它,因为它是正确的,但出于对他们删除答案的任何理由的尊重,我不会将它们命名并将使这个社区维基。如果他们想再将其发回,我会将其标记为正确,否则我会将此答案标记为正确。

他们发布了:

#idthatiknow > div span { /* your styles here */}
/* all spans with a direct child of div from #idthatiknow */


#idthatiknow span:not(#idthatiknow > div span) { /* your styles here */}
/* all spans except the ones with a direct child of div from #idthatiknow */

第二个解决了我的问题 - 它允许选择任意元素的任意后代,排除另一个元素的后代。