XPath Expression在Chrome中返回“指定的非法字符串”但不返回FF

时间:2013-12-29 23:31:10

标签: javascript google-chrome xpath greasemonkey evaluate

所以这是一个xPath表达式,在Firefox用户脚本中运行良好,但在(本机)chrome用户脚本中失败:

var nodesSnapshot = document.evaluate("//a[@class='inline-object' and .[contains(@href,'test.com')] ]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
//just the string:
"//a[@class='inline-object' and .[contains(@href,'test.com')] ]"

错误讯息: 未捕获的SyntaxError:指定了无效或非法的字符串。

我尝试了几件事(例如额外的括号),谷歌搜索和搜索stackoverflow没有成功。我也尝试过:

"//a[@class='inline-object action-card' and .[@href = 'test.com']]"

这也没用。是否有人可以解释这一点并更正代码? 提前致谢

编辑:更重要的信息:问题似乎是'和声明'中的'当前节点'(点)

2nd Edit:这是一个测试节点: <a href="test.com" class="inline-object"> text of the testnode </a>

1 个答案:

答案 0 :(得分:2)

.[true()]这样的XPath表达式实际上是非法的(至少在XPath 1.0中)。仅允许谓词

您应该只关注@Ross Patterson的建议并撰写//a[@class='inline-object' and contains(@href,'test.com')]。或者,或者更复杂:

  • self::node()[contains(@href,'test.com')]
  • self::*[contains(@href,'test.com')]
  • (.)[contains(@href,'test.com')]