2

我有以下..

 var result = doc.evaluate("//input[@class=\"form_field_as as-input\"]", 
                           context, 
                           null, 
                           XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, 
                           null);
    for(var i = 0; i < result.snapshotLength; i++) {
    a[i] = result.snapshotItem(i);
}
return a;

我正在评估的表达式来自输入。该代码在 FireFox 中运行良好,但是当我在 Chrome 上对其进行测试时,它不会返回任何内容。我究竟做错了什么?

我正在评估的输入是..

<input type="text" id="sharees" class="form_field_as">
4

1 回答 1

5

来自http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate

contextNode 类型 是用于评估此 XPath 表达式的上下文节点Node
context如果 XPathEvaluator 是通过强制转换获得的,Document那么 this 必须属于同一个文档,并且必须是DocumentElementAttributeTextCDATASectionCommentProcessingInstructionXPathNamespace节点。如果上下文节点是 aText或 a CDATASection,则上下文被解释为 XPath 所见的整个逻辑文本节点,除非节点为空,在这种情况下它可能不能用作 XPath 上下文。

所以,你context必须是这些类的一些实例。我猜你可能根本没有设置这个变量。您也可以使用null并且上下文将成为您正在评估表达式的节点。

Besides that, do note that //input[@class='form_field_as as-input'] is an absolute expression and it will return the same result from any context (outside document context is not allowed when "XPathEvaluator was obtained by casting the Document" ).

于 2011-02-10T19:04:49.990 回答