XPath для поиска элементов, у которых нет идентификатора или класса


88

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

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

Благодарность

Ответы:


147

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

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

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

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

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


22

Если вы ищете элемент, который имеет класс, 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 + ']'); 
    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.