Sam*_*Sam 23 jquery parent descendant jquery-selectors
请考虑以下HTML:
<div class="foo" id="obj">
I should be changed red
<div class="bar" style="color:black;">
I should not be changed red.
<div class="foo">I should be changed red.</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
给定一个DOM元素obj和一个表达式,我该如何选择任何一个孩子obj?我正在寻找类似于"选择后代"的东西,但如果它与表达式匹配,还包括父级.
var obj = $("#obj")[0];
//wrong, may include siblings of 'obj'
$(".foo", $(obj).parent()).css("color", "red");
//wrong -- excludes 'obj'
$(".foo", obj).css("color", "red");
//correct way, but it's annoying
var matches = $(".foo", obj);
if ($(obj).is(".foo")) matches = matches.add(obj);
matches.css("color", "red");
Run Code Online (Sandbox Code Playgroud)
有更优雅的解决方案吗?
tva*_*son 28
如果我理解正确的话:
$(currentDiv).contents().addBack('.foo').css('color','red');
Run Code Online (Sandbox Code Playgroud)
为清楚起见,我将"div"重命名为"currentDiv".这将选择当前元素及其包含的所有元素,然后筛选出没有类的元素foo,并将样式应用于余数,即具有类的元素foo.
编辑 略有优化
$(currentDiv).find('.foo').addBack('.foo').css('color','red');
Run Code Online (Sandbox Code Playgroud)
编辑
此答案已更新,以包含更新的jQuery方法.它原来是
$(currentDiv).find('.foo').andSelf().filter('.foo').css('color','red');
Run Code Online (Sandbox Code Playgroud)
这仍然是早于1.8的jQuery所必需的
jQuery 1.8引入了.addBack(),它接受了一个选择器,支持.andSelf().所以tvanfosson的代码变得更有效率
$(currentDiv).find(".foo").addBack(".foo").css("color", "red");
Run Code Online (Sandbox Code Playgroud)
如果你没有那个,我想是的
$(currentDiv).find(".foo").add(currentDiv.filter(".foo")).css("color", "red");
Run Code Online (Sandbox Code Playgroud)
即使不是非常漂亮,也会很有效率.
| 归档时间: |
|
| 查看次数: |
12158 次 |
| 最近记录: |