Как сделать сложение по значениям, возвращаемым селектором в jQuery? - PullRequest
3 голосов
/ 13 июня 2011

Скажем, у меня есть некоторые элементы HTML:

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

Чье содержимое я выбираю с помощью:

$('div').text();

Как я могу выполнить операцию "foldl" над элементами (итерация,накапливая результат), например, чтобы присоединиться к ним с помощью новой строки?

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

Ответы [ 3 ]

5 голосов
/ 13 июня 2011

Согласно статье в Википедии о сворачивании , функции JavaScript Array.reduce () (для foldl) и Array.reduceRight () (для foldr) обеспечивают свертывание массива.

конкретная задача становится:

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

Обратите внимание, что не все реализации JavaScript поддерживают lower и reduRight, поэтому посмотрите этот пример реализации , если необходимо.

ОБНОВЛЕНО: Поскольку jQuery нене возвращают истинный массив для $ (селектор), и некоторые платформы не поддерживают Reduce и ReduRight для «подобной массиву» коллекции jQuery, я обновил ответ, чтобы использовать $ .makeArray (), как предложено ниже.Спасибо @royas за улов.

1 голос
/ 13 июня 2011

Я не уверен, что такое 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(''));
0 голосов
/ 13 июня 2011

Мне кажется, я понимаю, что вы подразумеваете под "сворачиванием", не уверен ... Но попробуйте это:

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

Доступно по адресу: http://api.jquery.com/each/

...