2012-08-23 83 views
1

我有下面的代碼..jQuery選擇困惑

<span class="under"> 
texthere 
    <ul class="list"> 
     <li> list text here</li> 
    </ul> 
</span> 

當我運行$(".under").text()我 「在這裏textherelist文本」 獲得。我試過$(".under :not(.list)").text()並得到underfined。

我還沒有得到正確的輸出$(".under").not(".list").text()

所以我最後學嘗試爲$(".list").parent().text()

這將導致這裏

textherelist文字我在哪裏有這麼簡單的東西去錯了嗎?

p.s.如果它更簡單,不一定非得是jQuery。

求購結果:texthere

+2

你不是說你想要得到的結果是什麼,只是有什麼不同的選擇的結果。請指定您想要的結果。 –

+0

我猜只是文字,而不是元素。 – Aesthete

+0

很抱歉更新... – LmC

回答

2

docs

說明:獲取每個元素的組合的文本內容中匹配的元素,包括其後代的集 。

所以是的,這種行爲是預期的。

你可以試試這個得到的只有一個選擇的直接文本節點:

$('.under').contents().filter(function(){ return(this.nodeType == 3); }).text() 

說明:

.contents()docs)返回一個選擇的兒童,包括textnodes

描述:獲取匹配的 元素集中每個元素的子元素,包括文本和註釋節點。

.filter()需要回調只返回您需要的東西,基於此,您只將nodeType == 3這是一個文本節點。

http://jsfiddle.net/R4Pzf/

+0

我如何解決此問題,例如沒有獲取組合文本? – LmC

+0

@LiamMcCann編輯我的答案 –

+0

非常好的答案defo + 1,還有一個問題你的更優雅和更好的性能或克隆()的答案?爲什麼? – LmC

3

所以我猜你的文本之後是:texthere

var elem = $(".under").clone(), 
    text = $.trim(elem.children().remove().end().text()); 

FIDDLE

克隆的元素,刪除所有的子元素,並獲得剩餘的文本。