是否有可能选择一个元素,但如果两个元素的id-s都已知,则没有嵌入其中的一个元素?
像:
<div id="outerdiv">
<div>
<div id="innerdiv1"> </div>
<div id="innerdiv2"> </div>
</div>
</div>
我想做一个选择哪个会返回outerdiv但没有像这样的innerdiv2:
<div id="outerdiv">
<div>
<div id="innerdiv1"> </div>
</div>
</div>
是否有类似$('#outerdiv')的声明。不是('#innerdiv2')还是可以做到这一点的东西? 我可以使用clone()+ remove()解决这个问题,但我只是徘徊是否有机会这样做..
感谢
答案 0 :(得分:6)
你在这里,
$('#outerdiv div:not(#innerdiv2)')
包括外部div:
$('#outerdiv div:not(#innerdiv2),#outerdiv')
它实际上是一个有效的CSS3选择器,它也适用于jQuery。
要回答你的评论,我在浏览器控制台上进行了一些测试:
a = $('<div id="a"><div id="wrap"><div id="one"></div><div id="two"></div></div>')
a.find('div:not(#two)').addClass('a')
Result:
<div id="wrap" class="a">
<div id="one" class="a"></div>
<div id="two"></div>
</div>
html()
方法打印所选堆栈的第一个匹配元素的HTML内容。您选择的堆栈类似于:[#outerdiv,div,#innerdiv1]。因此html()
将显示#outerdiv
的html。如果您需要生成不带#innerdiv2
的HTML,那么您需要将其分离:
$('#innerdiv2').detach()
$('#outerdiv').html()
答案 1 :(得分:1)
我首先想到你可以用选择器做这个,但是如果你想要html结构,我相信你需要实际拥有一个html结构,而不是#selector的匹配元素列表。即:
$(document).ready(function(){
var clone = $('#outerdiv').clone()
$(clone).hide();
$('body').append(clone);
$(clone).attr('id','cloneddiv');
$('#' + $(clone).attr('id') + ' #innerdiv2').remove();
console.log($(clone));
$(clone).remove();
});
console.log()引用Firebug的控制台日志记录工具。这在某种程度上得到了你想要的东西。
我想注意,其他人有这样的答案,但他们删除了它。不知道为什么......