2011-02-03 63 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的控制檯日誌工具。在某種程度上,這可以獲得你正在尋找的東西。

我想指出,別人有這樣的答案,但他們刪除了它。不知道爲什麼...