Вложенный поиск документов.evalute? - PullRequest
4 голосов
/ 13 ноября 2011
var links = document.evaluate("//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).evaluate("//A");

в основном мне нужно найти элемент через xpath.затем найдите этот элемент через xpath.Очевидно, что выше не работает, но и не использует аргумент contextNode.

var headings = document.evaluate("//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]", document, null, XPathResult.ANY_TYPE, null); 
var thisHeading = headings.iterateNext();  

var headings2 = document.evaluate("//A", thisHeading, null, XPathResult.ANY_TYPE, null); 

headings2.iterateNext().style.backgroundColor = "red";

Мне нужно иметь возможность искать дочерние элементы элемента через xpath.

Ответы [ 3 ]

2 голосов
/ 13 ноября 2011

Проблема в том, что дочерние элементы тегов p должны быть встроенными элементами. Таблицы в абзацах не допускаются. Если вы удалите теги p, которые вы можете использовать в своем исходном коде, посмотрите это jsfiddle .

2 голосов
/ 13 ноября 2011

Вы должны использовать XPathResult.FIRST_ORDERED_NODE_TYPE в сочетании с singleNodeValue, чтобы получить первый элемент выражения XPath. Затем используйте .//A, чтобы выбрать любой элемент <a>, который является дочерним элементом соответствующего узла. Если вы хотите соответствовать прямому ребенку, используйте ./A:

var headings = document.evaluate("//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]",
                     document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 
var thisHeading = headings.singleNodeValue;    
var headings2 = document.evaluate(".//A", thisHeading, null, XPathResult.ANY_TYPE, null); 

headings2.iterateNext().style.backgroundColor = "red";
1 голос
/ 14 ноября 2011

В основном мне нужно найти элемент через xpath. тогда ищи это элемент через xpath

Это можно сделать с помощью одного выражения XPath .

Используйте :

//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1]//A

Чтобы выбрать все //BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1] элементы, которые не имеют потомка A, используйте :

//BODY/CENTER[1]/P[1]/TABLE[1]/TBODY[1]/TR[1][not(//A)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...