我有这个标记:
<div class="click">click</div>
<div id="wrapper">
<div class="container">
<div data-attrfirst='type1'><span data-attrsecond='type2'>must be red</span></div>
</div>
</div>
我想选择所有.container
:
1.在#wrapper
内;
2.包含data-attrfirst='type1'
元素,而该元素又包含data-attrsecond='type2'
元素
我的要求:
1.我的'#wrapper','type1','type2'值必须保存为变量
2.我必须在某个标签内找到这一切(在这种情况下,我选择body
)。
我尝试了这个(星号可能会删除,没有区别):
<script>
$(document).ready(function () {
$('.click').click(function () {
var myid = '#wrapper';
var attrfirst = 'type1';
var attrsecond = 'type2';
var elem = $('*[data-attrfirst=' + attrfirst + ']').has('*[data-attrsecond=' + attrsecond + ']');
$('body').find(myid + ' .container').each(function (i) {
if ($(this).has('*[data-attrfirst=' + attrfirst + '] *[data-attrsecond=' + attrsecond + ']')) {
$(this).css('color', 'red')
}
});
$('body').find(myid + ' .container').each(function (i) {
if ($(this).has(elem)) {
$(this).css('color', 'red')
}
});
$('body').find(myid + ' .container').filter(function (i) {
return $('*[data-attrfirst=' + attrfirst + '] *[data-attrsecond=' + attrsecond + ']', this).length >= 1
}).css('color', 'red')
});
});
</script>
我哪里错了?我不明白Jquery文档,.has
是否接受Jquery对象?
答案 0 :(得分:1)
您的问题是要找到#container
,请使用此选项:
$('body #wrapper .container:has([data-attrfirst="type1"] [data-attrsecond="type2"])');
或者,为了减少混乱,你可以倒退:
$('[data-attrfirst="type1"] [data-attrsecond="type2"]')
.closest('body #wrapper .container');
但是,从您的代码中,您似乎确实希望找到最后一个data-attrsecond="type2"
元素。在这种情况下,请使用:
$('body #wrapper .container [data-attrfirst="type1"] [data-attrsecond="type2"]');
答案 1 :(得分:0)
您正在尝试查找.container
,但您已将'container'定义为id属性而非class属性。 #container
应该返回您要查找的元素。
答案 2 :(得分:0)
这将有效:
attrfirst = 'type1';
attrsecond = 'type2';
thetag = 'body';
$(thetag + " #wrapper [data-attrfirst='" + attrfirst + "'] [data-attrsecond='" + attrsecond + "']").css('color', 'red')