[Ответ добавлен после прочтения комментариев ОП к отличному ответу Энди]
Проблема в том, что вы видите текстовые узлы внутри элементов, содержимое которых обычно не отображается браузерами - таких как теги STYLE и SCRIPT.
При сканировании дерева DOM с использованием поиска по глубине, который, как я полагаю, при сканировании должно пропустить содержимое таких тегов .
Например, рекурсивный DOM с глубиной в началеОбходчик дерева может выглядеть следующим образом:
function walker(domObject, extractorCallback) {
if (domObject == null) return; // fail fast
extractorCallback(domObject);
if (domObject.nodeType != Node.ELEMENT_NODE) return;
var childs = domObject.childNodes;
for (var i = 0; i < childs.length; i++)
walker(childs[i]);
}
var textvalue = "":
walker(document, function(node) {
if (node.nodeType == Node.TEXT_NODE)
textvalue += node.nodeValue;
});
В таком случае, если у вашего обходчика встречаются теги, которые, как вы знаете, вам не понравятся, вы должны просто пропустить вход в эту часть дерева.,Так что walker()
нужно будет адаптировать следующим образом:
var ignore = { "STYLE":0, "SCRIPT":0, "NOSCRIPT":0, "IFRAME":0, "OBJECT":0 }
function walker(domObject, extractorCallback) {
if (domObject == null) return; // fail fast
extractorCallback(domObject);
if (domObject.nodeType != Node.ELEMENT_NODE) return;
if (domObject.tagName in ignore) return; // <--- HERE
var childs = domObject.childNodes;
for (var i = 0; i < childs.length; i++)
walker(childs[i]);
}
Таким образом, если мы увидим тег, который вам не нравится, мы просто пропустим его и всех его потомков, и ваш экстрактор никогда не будетподвергаться воздействию текстовых узлов внутри таких тегов.