2013-02-15 1 views
0

Код ниже достигнет предупреждений «до» и «между», но не предупреждения «после».Оценка Xpath в javascript не работает относительно некоторого элемента

alert("before") 

var test = document.evaluate('.//*',document,document.createNSResolver(document),XPathResult.ANY_TYPE,null) 
alert(element.tagName)//alerts "TABLE" 
alert("between") 
test = document.evaluate('.//*',element,document.createNSResolver(document),XPathResult.ANY_TYPE,null) 
alert("after") 

Это написано как часть расширения селена. и alert(document) в коде дает другой результат, чем alert(document) при запуске в firebug. [object XULDocument] vs [object HTMLDocument].

ответ

0

решена.

document не относится к документу HTML в расширениях селена. однако каждый элемент имеет ссылку на документ, который его владеет. в этом случае

test = document.evaluate('.//*',element,document.createNSResolver(document), 
XPathResult.ANY_TYPE,null) 

становится

test = element.ownerDocument.evaluate('.//*',element, 
element.ownerDocument.createNSResolver(element.ownerDocument), 
XPathResult.ANY_TYPE,null) 

и так далее ...

0

Ваш второй тест имеет неопределенную переменную element.

+0

Это не определено, это просто не определено в том, что я разместил. просто предположим, что это какой-то элемент в документе. – Zackkenyon

+0

Я добавил строку, чтобы сделать это более понятным. – Zackkenyon

+0

hm ... при просмотре этой страницы и вводе в консоль 'var element = document.getElementById ('footer'); test = document.evaluate ('.//*', element, document.createNSResolver (document), XPathResult.ANY_TYPE, null); 'возвращает полезный объект XPathResult'. – Jerry

0

Вариантом Zackkenyon ответа, без распознаватель, кажется, работает.

var rangee = table.ownerDocument.evaluate("./tbody/tr", table, null, 
XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 
+0

Это ответ. Вам не нужно извиняться за это. – Drew

Смежные вопросы