document.evaluate не работает в Chrome? - PullRequest
2 голосов
/ 10 февраля 2011

У меня есть следующее ..

 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">

1 Ответ

5 голосов
/ 10 февраля 2011

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

contextNode типа Node
context является контекстным узлом для оценка этого выражения XPath. Если XPathEvaluator был получен кастинг Document тогда это должно должны принадлежать одному и тому же документу и должны быть Document, Element, Attribute, Text, CDATASection, Comment, ProcessingInstruction или XPathNamespace узел. Если контекст узел является Text или CDATASection, тогда контекст интерпретируется как весь логический текстовый узел, как видно из XPath, если узел не пуст в этом случае он не может служить Контекст XPath.

Итак, ваш context должен быть некоторым экземпляром этих классов. Я предполагаю, что вы, вероятно, вообще не устанавливаете эту переменную. Вы также можете использовать null, и контекст станет узлом, из которого вы оцениваете выражение.

Кроме того, обратите внимание, что //input[@class='form_field_as as-input'] является абсолютным выражением, и оно будет возвращать тот же результат из любого контекста (внешний контекст документа не допускается, когда "XPathEvaluator получено путем приведения Document" ).

...