Почему не работает document.evaluate? - PullRequest
1 голос
/ 28 июля 2010

Я использую это в расширении Firefox и не могу заставить его работать.

var allLinks = document.evaluate(
                        '//a[@href]', 
                        window.document, 
                        null, 
                        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
                        null);
window.alert(allLinks);

Это предупреждение [object XPathResult].Однако следующее всегда возвращает 0.(И, конечно, на странице есть ссылки).

window.alert(allLinks.snapshotLength);

Ответы [ 3 ]

1 голос
/ 28 июля 2010

Если это специфично для Firefox, и я предполагаю, что вы используете только новые версии ... вы не можете использовать querySelectorAll?

document.querySelectorAll('a[href]')

Кроме того - вы делаете это, когда DOM полностью загружен?привязать его к DOMContentLoaded или к чему-либо.

document.addEventListener('DOMContentLoaded', fn, false);

РЕДАКТИРОВАТЬ: Ваш xpath работает для меня .Сделал это в консоли на существующей, загруженной странице.Уверен, что вы запрашиваете, прежде чем что-либо существует.

0 голосов
/ 29 июля 2010

Это сработало.

        var allLinks = top.document.getElementById("content").selectedBrowser.contentDocument.evaluate(
                            treeView.model[0].xpath, 
                            top.document.getElementById("content").selectedBrowser.contentDocument, 
                            null, 
                            XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
                            null);
0 голосов
/ 28 июля 2010

Ответ, который вы не хотите слышать - «работает для меня».

См. этот пример (оповещения 3 для меня).

Какой браузери на какой версии вы это тестируете?

...