gpt4 book ai didi

javascript - 如何在没有标签的情况下获取DOM和文本中的所有元素

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:01 26 4
gpt4 key购买 nike

var elements = document.body.getElementsByTagName('*');

for(var b = 0; b < elements.length; b++) {
// Here is DOM elemenets with tags
// I need to get here DOM elements with HTML tags and DOM elements without HTML tags.
}

我该怎么做?提前致谢。

jsfiddle:http://jsfiddle.net/Y9B4B/

( Vanilla )

最佳答案

因此,从您的 jsFiddle 看来,您想要的是 <body> 中的文本,但不在任何其他标签中。我称之为“顶级文本”。您可以像这样通过遍历 body 元素的子节点并仅收集文本节点来收集顶级文本节点。另一个标签中的任何文本都将是该标签的子标签,而不是正文的直接子标签。

function getTopTextNodes() {
var textNodes = [];
var topNodes = document.body.childNodes;
for (var i = 0; i < topNodes.length; i++) {
if (topNodes[i].nodeType == 3) {
textNodes.push(topNodes[i]);
}
}
return textNodes;
}

或者,如果您想要文本 block :

function getTopText() {
var text = [];
var topNodes = document.body.childNodes;
for (var i = 0; i < topNodes.length; i++) {
if (topNodes[i].nodeType == 3) {
text.push(topNodes[i].nodeValue);
}
}
return text;
}

请记住,在文档中显示为单段文本的内容可能出现在多个相邻的文本节点中。如果你想合并来自连续文本节点的文本,可以这样做:

function getTopTextCombined() {
var text = [];
var lastNodeType;
var topNodes = document.body.childNodes;
for (var i = 0; i < topNodes.length; i++) {
if (topNodes[i].nodeType == 3) {
if (lastNodeType === 3) {
text[text.length - 1] += topNodes[i].nodeValue;
} else {
text.push(topNodes[i].nodeValue);
}
}
lastNodeType = topNodes[i].nodeType;
}
return text;
}

请注意,不同的浏览器会将内容放入文本节点中的方式略有不同。在 Chrome 中,你会得到一些只有空格的文本节点,如果你只想要可见的文本,你可能需要忽略这些节点,并且文本中也可能有\n 字符。

关于javascript - 如何在没有标签的情况下获取DOM和文本中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23987060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com