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.js)
因此,从您的jsFiddle看来,您想要的是中的文本<body>
,而不是其他任何标签中的文本。我称之为“顶层文字”。您可以通过遍历body元素的childNode并仅收集文本节点来收集顶级文本节点。另一个标签中的任何文本都将是该标签的子级,而不是正文的直接子级。
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;
}
或者,如果您想要文本块:
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个字符,则可能需要忽略它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句