JQuery - 选择整个元素,除了嵌套在其中的一个特定元素

时间:2011-02-03 21:35:23

标签: jquery

是否有可能选择一个元素,但如果两个元素的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()解决这个问题,但我只是徘徊是否有机会这样做..

感谢

2 个答案:

答案 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的控制台日志记录工具。这在某种程度上得到了你想要的东西。

我想注意,其他人有这样的答案,但他们删除了它。不知道为什么......