XPath para encontrar elementos que não tenham um id ou classe


88

Como posso obter todos os elementos tr sem o atributo id?

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

obrigado

Respostas:


147

Bem direto:

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

Isso lhe dará todos os trelementos sem os atributos ide class. Se você quiser que todos os trelementos não tenham um dos dois, use em orvez de and:

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

Quando atributos e elementos são usados ​​dessa forma, se o atributo ou elemento tiver um valor, ele será tratado como se fosse verdadeiro. Se estiver faltando, será tratado como se fosse falso.


22

Se estiver procurando por um elemento que tenha classe, amas não tenha classe b, você pode fazer o seguinte.

//*[contains(@class, 'a') and not(contains(@class, 'b'))]

Ou se você quiser ter certeza de não corresponder a parcial.

//*[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 + ']'); 
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.