1

HTML ドキュメントにいくつかのスクリプト ノードがあるとします。特定のソース値を含むすべてのスクリプト ノードを選択するにはどうすればよいでしょうか。

<head>
</head>
<body>
    <script type="text/javascript">
        blah();
    </script>
</body>

関数を含む本体内のスクリプト ノードのみを選択する適切な方法は何blahですか?

アップデート

試してみ//script[contains(text(), 'blah')]ましたが、うまくいきませんでした。

4

2 に答える 2

1

//script[contains(., 'blah') は、. text() は、(理論上) 複数のテキスト ノードが存在する可能性があり、text() はそれらすべてのシーケンスに一致します。

もう 1 つの可能性は、XHTML があり、XHTML 名前空間を接頭辞 ("h" など) にバインドする必要があることです。たとえば、//h:script[contains(., 'blah')] のようにします。その方法は、 registerNamespace() などの正確な呼び出し環境。ドキュメントの xmlns="...." にあるのと同じ URI を登録する必要があります。たとえば、.net で XmlDocument を使用している場合は、次のようにhttp://www.w3.org/1999/xhtmlのようになります。

System.Xml.XmlNamespaceManager xmlnsManager =
                 new System.Xml.XmlNamespaceManager(xmldoc.NameTable);

xmlnsManager.AddNamespace("h", "http://www.w3.org/1999/xhtml", xmlnsManager);

result = xmldoc.SelectNodes('//h:script[contains(., 'blah')]')
于 2012-09-10T22:37:11.893 に答える
0

JavaScript 検索機能を使用して各スクリプト要素を反復処理するのはどうですか?

http://www.w3schools.com/jsref/jsref_search.asp

<script type="text/javascript">
    var s = document.getElementsByTagName('script'); 

    for (var i = 0; i < s.length; i++) {
        var src = s[i].innerText;
        var result = src.search("blah()");
        if (result != -1) {     
            console.log(src);
        }
    }

</script>

このスクリプトは、ページ読み込みロジック内に移動して、このスクリプトの後に発生するすべてのスクリプト要素を処理する必要があります。

于 2012-09-10T22:36:22.123 に答える