2017-10-17 87 views
0

我正在使用以下代码遍历包含电话号码的所有DOM元素。此代码适用于正在搜索的电话号码字符串中没有任何括号的情况,但我假设圆括号正在搞乱XPATH contains()函数。有没有人有任何想法,我怎么可以逃避这些括号,使代码再次工作?在XPATH中转义括号(document.evaluate)

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

我看不出为什么括号会导致失败。有什么症状?

请注意,通过字符串连接构造XPath表达式是不好的形式。主要有两个原因:您受到注入攻击,每次使用时都必须重新编译表达式。更好地使表达式包含变量,编译表达式一次,并在每次执行表达式时为变量提供一个值。

但是你使用Javascript,所以你可能没有多少选择(除非你转向Saxon-JS,当然)。

(稍后)再次考虑可能导致这种情况的原因,可以想到几种可能性。也许电话号码中的空格实际上是非空白的空格?也许DOM没有标准化,电话号码被分割到多个文本节点上? (总是最好避免使用text(),请改为尝试//*[contains(., '....')]。)