假设我不想找到具有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]
元素。
有什么建议吗?
答案 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 后代且具有相同属性的所有元素。在您的情况下,那是hello1
和job
。
如果您确定它们只是<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/
在您的情况下,那是app
和job
。
答案 1 :(得分:1)
答案 2 :(得分:0)
尝试$("body").children("[data-view]")
之类的内容。 .children()
只会查看所选元素的直接后代。
答案 3 :(得分:0)
这应该可以解决问题:
$('[data-view]:not([data-view] [data-view])').each(function() { ... });