XPath для поиска элементов, которые не имеют идентификатора или класса
Как я могу получить все элементы tr без атрибута id?
<tr id="name">...</tr>
<tr>...</tr>
<tr>...</tr>
Спасибо
Ответы
Ответ 1
Довольно просто:
//tr[not(@id) and not(@class)]
Это даст вам все элементы tr
, не имеющие атрибутов id
и class
. Если вы хотите, чтобы все элементы tr
не имели одного из двух, используйте or
вместо and
:
//tr[not(@id) or not(@class)]
Когда атрибуты и элементы используются таким образом, если атрибут или элемент имеет значение, он обрабатывается так, как если бы он был истинным. Если он отсутствует, его обрабатывают как ложное.
Ответ 2
Можете ли вы попробовать //tr[not(@id)]?
Ответ 3
Если вы ищете элемент, который имеет класс a
, но не имеет класс b
, вы можете сделать следующее.
//*[contains(@class, 'a') and not(contains(@class, 'b'))]
Или если вы хотите быть уверены, что не должны быть частичными.
//*[contains(concat(' ', normalize-space(@class), ' '), ' some-class ') and not(contains(concat(' ', normalize-space(@class), ' '), ' another-class '))]
Ответ 4
if (elm.hasAttribute('id')) {
//if id - implement here
} else if (elm.hasAttribute('class')) {
//if class - implement here
} else {
for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) {
if (sib.localName == elm.localName) i++; };
segs.unshift(elm.localName.toLowerCase() + '[' + i + ']');
}