2011-08-23 48 views
2

類似的問題已被問到,但不夠相似!JQuery:選擇封閉標籤之間的文本

鑑於這種結構:

<p class="text"> <b>1</b>this is point one<b>2</b>this is point two<b>3</b> </p>

我怎麼會選擇關閉標籤之間的文本?即「這是第一點」。

內容通過JSON調用反饋,所以我不能用他們給我的結構做很多事情。

謝謝!

+0

「這是第二點」怎麼樣? – BalusC

+0

@BalusC - 我也想得到:P我很確定這個方法對於任何一個都是一樣的。 – MadTurki

回答

3

可以取代你<b>#</b>的東西更容易拆就那麼遍歷結果

example jsfiddle

jQuery的:

var points = $('.text').html().replace(/<b>.<\/b>/g, ',').split(','), 
    $results = $('#results'); 
for (var i in points) { 
    if ($.trim(points[i]).length > 0) { 
     $results.html($results.html() + points[i] + "<br />"); 
    } 
} 
+0

儘管@ Shawn-Chin也有一個很好的解決方案,但我最終還是使用了這個解決方案。這對我來說更好。 – MadTurki

1

您可以使用.contents()獲取該值。你的情況,這會工作:

alert($(".text").contents().eq(2).text()) 
0

這裏有一個潛在的解決方案:

var nodes = $('p.text')[0].childNodes; 
var results = []; 

for (var i = 0; i < nodes.length; i++) { 
    if (nodes[i].nodeType == Node.TEXT_NODE) { 
     // support older browsers that do not have textContent 
     var text = nodes[i].textContent || nodes[i].innerText; 
     if ($.trim(text).length > 0) { // optional - push non-empty strings 
      results.push(text); 
     } 
    } 
} 
//console.log(results); 

演示:http://jsfiddle.net/mrchief/3L8Ze/1/

3

如果你需要一些文本節點的訪問,您可以使用提取所有到一個數組:

var data = $(".text").contents().filter(function() { 
    return this.nodeType == Node.TEXT_NODE && !this.nodeValue.match(/^\s*$/); 
}).toArray(); 

您現在可以訪問「這是第一點一個」使用data[0].nodeValue和「這是第二點」,使用data[1].nodeValue

工作小提琴:http://jsfiddle.net/jHhFS/

注:附加條件(!this.nodeValue.match(/^\s*$/))過濾掉僅包含空格的文本節點。