2011-08-31 50 views
1

望着這替代jQuery的每個() - 自我的教育問題

get value of inside a tag with jQuery.?

<span> 
<b>hi_1</b> 
<b>hi_2</b> 
<b>hi_3</b> 
<b>hi_4</b> 
<span> 

這裏的問題是要獲得一個用逗號分隔的標籤內容

串的解決方案是一個推入每一個。

是否有使用例如

$("span b").text().join(",")這當然因爲文本不工作()不返回數組較短的(也可能更快)的方式...

UPDATE:

發表阿爾喬姆的「錯誤報告」(需求)有這相當有趣的片段

var x = $("span b").map(function() { 
    return $(this).text(); 
}).toArray().join(", "); 

這類似於BrokenGlass'這樣lution但短...

http://jsfiddle.net/mplungjan/M42Qx/

我喜歡指定者一個...

回答

1

你可以使用map(),但我懷疑這將是更快,因爲你必須轉換從jQuery對象數組,並返回到jQuery對象:

var results = $("b").get() 
        .map(function(e) { return $(e).text();}) 
        .join(","); 
alert(results); 

jsFiddle link

+0

我喜歡 - 我想知道哪個更好,您或我在錯誤報告中找到的那個 – mplungjan

3

這可能是作弊,但因爲沒有在<b>標籤以外的任何文字,你可以簡單地使用$('span').text()<span>的內部文本並與工作,而不是...

$.trim($('span').text()) // Trim newlines near <span> and </span> tags 
.replace(/\s+/g, ', '); // Replace all other whitespace between <b></b> with , 
+0

+1非常性感的作弊 – meo

+0

整潔,但我確定最終用戶只想要「b」標籤的內容...... – mplungjan

+0

但是它並沒有刪除換行符! – mplungjan

0

是來到我的腦海裏唯一的選擇,並遠遠超過@BoltClock那麼令人印象深刻「小號替代方案中,是使用filter()

var values = []; 
$('b').filter(
    function(){ 
     return values.push($(this).text()); 
    }); 
alert(values); 

JS Fiddle demo

而這與使用each()的解決方案並沒有太大的不同,因爲它或多或少會做同樣的事情。

+0

我同意 - 它太相似了:)但是,謝謝 – mplungjan

1

有一個bug report有關添加此功能的text()方法,這是關閉工作解決方案後提供了幾種方法來做到這一點。