【发布时间】:2025-02-18 00:10:02
【问题描述】:
我正在寻找一种方法来收集 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 来做到这一点?跨浏览器的一致性非常重要。
感谢您的帮助!
【问题讨论】:
标签: javascript jquery dom traversal