1

好的,所以我有这个简单的 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;  
}

当前结果是“This is Thomas~This is Bufu”。我想要“这是Thomas~这是Bar~这是Foo~这是Bufu”。谁能告诉我出了什么问题或我该怎么办?我会感谢任何对我有帮助的答案。PS。这是一个 chrome 扩展,我需要从任何 html 页面获取所有文本,即使是一个非常复杂的页面。

4

1 回答 1

1

您正在过滤掉This is BarandThis 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++;
        }       
    }

http://jsfiddle.net/QEvFF/2/

于 2013-09-08T16:02:34.300 回答