1

假设我不想找到所有具有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>

它应该只返回app并且job不返回hello1。我在使用.not选择器时没有运气,它会停止选择任何[data-view]元素。

有什么建议么?

4

4 回答 4

1

尝试:

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

演示:http: //jsfiddle.net/gEVyk/1/

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

如果你确定它们只是<div>s,你应该使用div[data-view].

这将找到所有具有 0个具有相同属性的父级的属性的元素:

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

演示:http: //jsfiddle.net/ue9w9/1/

在你的情况下,那是appand job

于 2013-04-27T20:15:25.617 回答
1

怎么样

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

http://jsfiddle.net/p5P8X/

于 2013-04-27T20:15:48.860 回答
0

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

于 2013-04-27T20:13:24.670 回答
0

这应该可以解决问题:

$('[data-view]:not([data-view] [data-view])').each(function() { ... });
于 2013-04-27T20:18:07.983 回答