2011-02-03 64 views
2
中的一个特定元素

是否有可能选择一个元素,但没有嵌套在里面的元素之一,如果两个元素的id-s是已知的?JQuery - 选择整个元素,除了嵌套在

,如:

<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()+删除(),但我只是徘徊是有机会做这样..

感谢

+1

你想为此做什么? – 2011-02-03 21:42:15

+0

对不起,错过了您的评论。我尝试使用$('form')。serializeArray()序列化表单,但希望从表单元素中的表中排除输入。 – frenzy 2011-02-03 22:51:24

回答

5

给你,

$('#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

我开始还以为你能做到这一点有选择,但如果你想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的控制台日志工具。在某种程度上,这可以获得你正在寻找的东西。

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