Я ищу способ собрать весь текст в упакованный набор jQuery, но мне нужно создать пробелы между узлами-братьями, у которых нет текстовых узлов между ними.
Например, рассмотрим этот HTML-код:
<div>
<ul>
<li>List item #1.</li><li>List item #2.</li><li>List item #3.</li>
</ul>
</div>
Если я просто использую метод jQuery text()
для сбора текстового содержимого <div>
, например:
var $div = $('div'), text = $div.text().trim();
alert(text);
, который производит следующий текст:
Элемент списка № 1. Элемент списка № 2. Элемент списка № 3.
потому что между каждым элементом <li>
нет пробелов. На самом деле я ищу вот что (обратите внимание на один пробел между каждым предложением):
Элемент списка № 1. Элемент списка № 3. Элемент списка № 3.
Это подсказывает мне, что мне нужно пройти через узлы DOM в обернутом наборе, добавив текст для каждого в строку, а затем пробел. Я попробовал следующий код:
var $div = $('div'), text = '';
$div.find('*').each(function() {
text += $(this).text().trim() + ' ';
});
alert(text);
но это привело к следующему тексту:
Это элемент списка № 1. Это элемент списка № 2. Это элемент списка № 3. Это элемент списка № 1. Это элемент списка № 2. Это пункт списка № 3.
Я предполагаю, что это потому, что я перебираю каждого потомка <div>
и добавляю текст, поэтому я получаю текстовые узлы как в <ul>
, так и в каждом из его <li>
дочерних элементов, что приводит к дублированию текста .
Думаю, я мог бы найти / написать простую функцию JavaScript для рекурсивного обхода DOM обернутого набора, сбора и добавления текстовых узлов - но есть ли более простой способ сделать это с помощью jQuery? Кросс-браузерная согласованность очень важна.
Спасибо за любую помощь!