我使用以下代码迭代包含电话号码的所有DOM元素。当搜索的电话号码字符串中没有任何括号时,此代码有效,但我认为括号正在弄乱XPATH contains()函数。有没有人知道如何逃避这些括号以使代码再次起作用?
var oldPhoneNumber = '(123) 456-7890';
if (document.evaluate) {
var nextElement = document.evaluate("//text()[contains(.,\"" + oldPhoneNumber + "\")]", document, null, XPathResult.ANY_TYPE, null).iterateNext();
while (nextElement) {
nextElement = document.evaluate("//text()[contains(.,\"" + oldPhoneNumber + "\")]", document, null, XPathResult.ANY_TYPE, null).iterateNext();
}
}
谢谢!
答案 0 :(得分:0)
我不明白为什么括号应该导致失败。有什么症状?
请注意,通过字符串连接构造XPath表达式是不好的形式。有两个主要原因:您受到注射攻击,并且每次使用时都必须重新编译表达式。包含变量的表达式要好得多,编译表达式一次,并在每次执行表达式时为变量提供值。
但是你使用的是Javascript,所以你可能没有太多选择(当然,除非你转到Saxon-JS)。
(稍后)再次思考可能导致这种情况的原因,我想到了几种可能性。也许电话号码中的空格实际上是不间断的空间?也许DOM没有规范化,电话号码分为多个文本节点? (最好避免使用text()
。请尝试使用//*[contains(., '....')]
。)