XPath для поиска элементов, у которых нет идентификатора или класса - PullRequest
73 голосов
/ 08 марта 2010

Как я могу получить все элементы tr без атрибута id?

<tr id="name">...</tr>
<tr>...</tr>
<tr>...</tr>

Спасибо

Ответы [ 4 ]

116 голосов
/ 08 марта 2010

Довольно просто:

//tr[not(@id) and not(@class)]

Это даст вам все tr элементы без атрибутов id и class. Если вы хотите, чтобы во всех tr элементах отсутствовал один из двух, используйте or вместо and:

//tr[not(@id) or not(@class)]

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

15 голосов
/ 10 сентября 2015

Если вы ищете элемент, который имеет класс 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 '))]
8 голосов
/ 08 марта 2010

Можете ли вы попробовать //tr[not(@id)]?

0 голосов
/ 10 марта 2015
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 + ']'); 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...