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() 匹配所有这些节点的序列。

另一种可能性是您拥有 XHTML,并且您需要将 XHTML 命名空间绑定到前缀,例如“h”,并说,//h:script[contains(., 'blah')],以及如何做到这一点取决于确切的调用环境,例如 registerNamespace() 什么的。您需要在文档中注册与 xmlns="...." 中相同的 URI,很可能是http://www.w3.org/1999/xhtml,例如,如果您在 .net 中使用 XmlDocument,则如下所示:

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 回答