好的,我有这个简单的HTML代码
<html>
<head>
<script src="jquery.js"></script>
<script src="script.js"></script>
<title>Get all text</title>
</head>
<body>
<span>This is Thomas</span>
This is Bar
<div id="content">
This is Foo.
</div>
<span>This is Bufu</span>
</body>
</html>
我希望在变量中获取所有文本。所以我制作了这个javascript代码。但是“This is Foo”和“This is Bar”没有显示。
var sep = '~';
$(function() {
pageTexts = getTextFromPage();
console.log(pageTexts);
});
function getTextFromPage()
{
var pageText = '';
i = 0;
j = 0;
var itr = document.createTreeWalker(
document.getElementsByTagName("body")[0],
NodeFilter.SHOW_TEXT,
null, // no filter
false
);
while(itr.nextNode())
{
if (itr.currentNode.textContent.search("\t") && itr.currentNode.textContent.search("\n") && itr.currentNode.parentNode.nodeName.toLowerCase() != 'script' && itr.currentNode.parentNode.nodeName.toLowerCase() != 'noscript')
{
if (i == 0)
{
pageText = itr.currentNode.textContent;
i++;
}
else
{
pageText = pageText + sep + itr.currentNode.textContent;
i++;
}
}
charNumber = pageText.length;
elemNumber = i;
}
return pageText;
}
目前的结果是“这是托马斯〜这是布福”。而且我想要“这是托马斯〜这是酒吧〜这是Foo~这是Bufu”。谁能告诉我什么是错的或我该怎么办?我会答应任何有助于我的答案。 PS。这是一个chrome扩展,我需要从任何html页面获取所有文本,即使是一个非常复杂的页面。
答案 0 :(得分:1)
您正在使用条件This is Bar
过滤掉This is Foo.
和itr.currentNode.textContent.search("\n")
我不确定你在if语句中使用前两个条件尝试做什么,但是search
在找不到针时返回-1并且-1
是真正的
if (/*itr.currentNode.textContent.search("\t") &&
itr.currentNode.textContent.search("\n") &&*/
itr.currentNode.parentNode.nodeName.toLowerCase() != 'script' &&
itr.currentNode.parentNode.nodeName.toLowerCase() != 'noscript')
var text = $.trim(itr.currentNode.textContent);
if (text.length > 0 && itr.currentNode.parentNode.nodeName.toLowerCase() != 'script' && itr.currentNode.parentNode.nodeName.toLowerCase() != 'noscript')
{
if (i == 0)
{
pageText = text;
i++;
}
else
{
pageText = pageText + sep + text;
i++;
}
}