2011-06-13 68 views
3

說我有一些HTML元素:如何使jQuery中的選擇器返回的值摺疊?

<div>First</div> 
<div>Second</div> 
<div>Third</div> 

,其內容我通過一個選擇:

$('div').text(); 

我怎樣才能讓(迭代,積累的結果)的元素「與foldl」操作,例如加入他們使用換行符?

$('div').text().foldl('', function(){ ... join_or_whatever ... }) 
+0

更新標籤包含JavaScript,功能編程和摺疊。 – 2011-06-13 17:58:59

回答

5

據對folding維基百科的文章,JavaScript的Array.reduce()(爲foldl)和Array.reduceRight()(用於foldr)函數提供數組摺疊。

所以您的具體任務就變成了:

var result = $.makeArray($('div')).reduce(function(prev,curr){ 
     return prev + '\n' + $(curr).text() 
}); 

請注意,並非所有的JavaScript支持實現減少和reduceRight,所以看到這個example implementation如果需要的話。

更新:由於jQuery沒有爲$(selector)返回一個真正的數組,並且有些平臺不支持jQuery的「類似數組」的reduce和reduceRight,我已經更新了使用$ .makeArray )如下所示。感謝@royas的收穫。

+0

我不得不使用$ .makeArray($('div'))將$('div')轉換爲數組。減少... – royas 2013-06-19 13:51:14

1

我不知道什麼是與foldl但

這裏是你如何遍歷並連接:

var newArray = []; 
//'div' is an outer container of your inner divs 
$('div').each(function(index, Element) { 
    newArray.push($(this).text()); 
}); 

$('body').append(newArray.join('')); 
+1

你在這裏有一個語法錯誤......'}'所在的行需要'});' – Hogan 2011-06-13 18:45:10

0

我想我明白你的意思是「與foldl」,不知道... 但試試這個:

var finalStr = ""; 
$('div').each(function(index) { 
    finalStr += $(this).text() + "<br>"; 
}); 

請訪問:http://api.jquery.com/each/