jquery选择没有嵌套在孩子身上的孩子

时间:2012-12-28 15:51:14

标签: javascript jquery html jquery-selectors

我在使用jQuery选择器时遇到了一些问题。

假设我有以下html,其中(...)代表未定义数量的html标签。

(...)
<div class="container">
  (...)
    <div class="subContainer">
      (...)
        <div class="container">
          (...)
            <div class="subContainer"/>
          (...)
        </div>
       (...)
     </div>
   (...)
</div>
(...)

假设我有一个名为container的javascript变量指向第一个div(带有类容器)。 我想要一个jquery来选择第一个子容器而不是嵌套的子容器。 如果我使用$(".subContainer", container);,我会同时获得它们。

我尝试过使用

$(".subContainer:not(.container .subContainer)", container);

但这会返回一个空集。 任何解决方案?

感谢。

4 个答案:

答案 0 :(得分:7)

您可以使用direct child选择器:

$("> .subContainer", container);

如果container是引用顶级.container元素的jQuery对象,您还可以使用children方法:

container.children('.subContainer');

findfirst方法:

container.find('.subContainer').first();

答案 1 :(得分:7)

基于Jquery: Get all elements of a class that are not decendents of an element with the same class name?我开发了以下解决方案。 谢谢大家。

$.fn.findButNotNested = function(selector, notInSelector) {
    var origElement = $(this);
    return origElement.find(selector).filter(function() {
        return origElement[0] == $(this).closest(notInSelector)[0];
    });
};

答案 2 :(得分:0)

要获得第一个subContainer,您可以使用

$('.subContainer')[0]

答案 3 :(得分:0)

这似乎适用于我自己的用途......

$('.item').filter(function() { return $(this).parents('.item').length == 0; });

这只返回#outer div。

<div class="item" id="outer">
    <div class="item" id="inner"></div>
</div>