2009-10-09 147 views
14

讓我們考慮下面的HTML代碼:如何使用jQuery獲取給定元素之前的文本?

<p> 
    Some text followed by <span>a span element</span> 
    and another text followed by <b>a bold text</b>. 
</p> 

我怎樣才能使用jQuery的spanb元素之前的文本?

我試圖$("span").prev()$("b").prev(),但它的工作,因爲文本不是元素。我也嘗試$("span").parent(),但它匹配整個段落,而我只想要它的一部分。

你能不能建議任何解決方案?謝謝你在前進:-)

+0

的相當多的重複:http://stackoverflow.com/questions/1017330/extract-the-text-in-a-element-with-jquery – peirix 2009-10-09 13:15:30

+3

並非如此相似。在這裏,我只想提取出現在給定元素之前的文本,而不是整個文本。 – czuk 2009-10-09 13:30:33

回答

21

如何蒐集到一個數組,而不是兩次調用$

var texts = $('span, b').map(function(){ 
    return this.previousSibling.nodeValue 
}); 
texts[0]; // "Some text followed by " 
texts[1]; // " and another text followed by " 

參考文獻:

+0

絕佳的回答。很好的推理和引用。 – KyleFarris 2009-10-09 14:33:34

+0

謝謝你的解決方案。但是,我無法在這種情況下使其工作。 'var c = jQuery('span');'後來'c.previousSibling'返回null,但'c.context.previousSibling'沒問題。爲什麼? – czuk 2009-10-09 14:39:39

+0

我在說,不要使用這種情況('c.context')。在我的答案中使用代碼。 – 2009-10-09 14:56:43

3

恐怕你將需要使用正則表達式爲。爲了得到橫跨元件前的文本中使用這樣的:

var txt = $('span').parent().html(); 
var regex = /(.*)<span>/; 
txt = txt.match(regex)[1]; 

修改正則表達式匹配字符串的其他地方也是如此。

+0

+1你打我吧! – Jared 2009-10-09 13:15:55

+2

這不起作用,因爲text()不返回任何html。其次,即使您將其更改爲使用html(),目標元素可能不是父級中的第一個跨度。 – Borgar 2009-10-09 13:20:19

+0

這只是一個演示你如何做到這一點。有沒有簡單的方法來獲得這個文本剝離所有標記的內容。你必須使用正則表達式。 – RaYell 2009-10-10 04:52:33

0

我想出了一個以下解決方案:

var c = $("span").context.previousSibling; 
alert(c.data); 

但我使用不同的瀏覽器時,我不知道它是多麼安全?

+0

爲什麼你不使用我的解決方案?它做同樣的事情,但沒有訪問'.context'。 – 2009-10-09 13:53:42

+0

這是一種替代解決方案。在所有情況下,您的解決方案都無法使用(我無法使用)。 – czuk 2009-10-12 07:22:36

1
var textBefore = $('span')[0].previousSibling.nodeValue; 

我正在尋找解決方案,並且很困惑,爲什麼我需要映射到一個數組。上下文不適合我。我終於想出瞭如何寫它。

這是最基本的解決方案。將[0]轉換爲一個elementNode,它允許你調用previousSibling代碼。除非更方便,否則不需要使用map函數將其放入數組中。

相關問題