我不会为此而使用jQuery,尤其是那些对元素进行不必要克隆的解决方案。您所需要的就是一个简单的循环抓取文本节点。在现代JavaScript中(在撰写本文时,“现代”是一个移动的目标!),并从结果的开头和结尾删除空白:
const { childNodes } = document.getElementById("listItem");
let text = "";
for (const node of childNodes) {
if (node.nodeType === Node.TEXT_NODE) {
text += node.nodeValue;
}
}
text = text.trim();
生活例子:
const {childNodes} = document.getElementById("listItem");
Let text = "";
(childNodes的const节点){
如果节点。nodeType === Node.TEXT_NODE) {
text += node.nodeValue;
}
}
console.log(文本);
<李id = "列" >
这是一些文本
<span id="firstSpan">第一个span文本</span>
<span id="secondSpan">Second span text</span> . <span id="secondSpan">
李< / >
有些人会用reduce来表示。我不是一个粉丝,我认为一个简单的循环更清楚,但这种用法确实在每次迭代时更新累加器,所以它实际上并没有滥用reduce:
const { childNodes } = document.getElementById("listItem");
const text = [...childNodes].reduce((text, node) =>
node.nodeType === Node.TEXT_NODE ? text + node.nodeValue : text
, "").trim();
const {childNodes} = document.getElementById("listItem");
const text =[…childNodes]。Reduce ((text, node) =>
节点。nodeType ===节点。TEXT_NODE吗?文本+节点。nodeValue:文本
”、“).trim ();
console.log(文本);
<李id = "列" >
这是一些文本
<span id="firstSpan">第一个span文本</span>
<span id="secondSpan">Second span text</span> . <span id="secondSpan">
李< / >
或者不创建临时数组:
const { childNodes } = document.getElementById("listItem");
const text = Array.prototype.reduce.call(childNodes, (text, node) =>
node.nodeType === Node.TEXT_NODE ? text + node.nodeValue : text
, "").trim();
const {childNodes} = document.getElementById("listItem");
const text = Array.prototype.reduce。call(childNodes, (text, node) =>
节点。nodeType ===节点。TEXT_NODE吗?文本+节点。nodeValue:文本
”、“).trim ();
console.log(文本);
<李id = "列" >
这是一些文本
<span id="firstSpan">第一个span文本</span>
<span id="secondSpan">Second span text</span> . <span id="secondSpan">
李< / >