假设我在 HTML 文档中有多个脚本节点,我将如何选择所有包含特定源值的节点:
<head>
</head>
<body>
<script type="text/javascript">
blah();
</script>
</body>
仅选择正文中包含函数的脚本节点的正确方法是blah
什么?
更新
我试过//script[contains(text(), 'blah')]
了,但没有用。
//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')]')
使用 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>
该脚本应该进入页面加载逻辑以处理在此之后出现的所有脚本元素。