JQuery:不要在孩子中搜索

时间:2013-04-27 20:11:38

标签: javascript jquery data-binding

假设我不想找到具有data-view属性的所有元素,但我可以找到data-view的元素,这些元素是其他data-view元素的父元素。我不希望孩子们在寻找,我想要父母。

$('[data-view]').each(function() {});

使用以下HTML:

<body>
   <div data-view="app">
       <div data-view="hello1">
       </div>
   </div>
   <div data-view="job">

   </div>
</body>

它应仅返回appjob而不是hello1。我没有运气使用.not选择器,因为它停止选择任何[data-view]元素。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

尝试:

var target_attr = "[data-view]";
$(target_attr).filter(function () {
    return !$(this).find(target_attr).length;
}).each(function () {
    // Whatever
});

DEMO: http://jsfiddle.net/gEVyk/1/

这将找到具有data-view属性且具有0 后代且具有相同属性的所有元素。在您的情况下,那是hello1job

如果您确定它们只是<div>,则应使用div[data-view]

这将找到具有属性的所有元素,其中0 parents 具有相同的属性:

var target_attr = "[data-view]";
$(target_attr).filter(function () {
    return !$(this).parents(target_attr).length;
}).each(function () {
    // Whatever
});

DEMO: http://jsfiddle.net/ue9w9/1/

在您的情况下,那是appjob

答案 1 :(得分:1)

怎么样

$('[data-view]:not([data-view] [data-view])').each(function() {});

http://jsfiddle.net/p5P8X/

答案 2 :(得分:0)

尝试$("body").children("[data-view]")之类的内容。 .children()只会查看所选元素的直接后代。

答案 3 :(得分:0)

这应该可以解决问题:

$('[data-view]:not([data-view] [data-view])').each(function() { ... });