13

doSomething(textNode)ドキュメントに表示されているテキストのすべてのインスタンスで関数を呼び出すブックマークレットを作成しようとしています。

doSomething()は、面白半分に、渡された textNode の textContent を置き換えることで、すべての単語を「derp」に置き換えます。ただし、これにより、空の textNodes に単語が含まれるようになるため、Web ページが壊れます。

doSomething()単語が含まれるすべての textNode のみを呼び出す方法はありますか?

function recurse(element)
{
    if (element.childNodes.length > 0) 
        for (var i = 0; i < element.childNodes.length; i++) 
            recurse(element.childNodes[i]);

    if (element.nodeType == Node.TEXT_NODE && element.nodeValue != '') 
        doSomething(element);
}
var html = document.getElementsByTagName('html')[0];
recurse(html);
4

1 に答える 1

10

これを変える...

element.nodeValue != ''

これに...

/\S/.test(element.nodeValue)

これは、/\S/少なくとも 1 つの非スペース文字を検索する正規表現を使用します。

「言葉」の意味をさらに定義する必要があるかもしれません。空白のみのノードのみを除外していると解釈しました。


をサポートするブラウザではString.prototype.trim、これは代替手段になります...

element.nodeValue.trim() != ''
于 2012-02-07T14:43:18.053 に答える