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.