2010-03-08 6 views

risposta

88

molto semplice:

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

che vi darà tutte le tr gli elementi che mancano sia id e class attributi. Se si desidera che tutti tr elementi privi di uno dei due, utilizzare or invece di and:

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

Quando gli attributi e gli elementi vengono utilizzati in questo modo, se l'attributo o elemento ha un valore che viene trattata come se è vero . Se manca, viene trattato come se fosse falso.

+0

L'esempio "o" funziona. Dal momento che è un negativo contro? –

6

Puoi provare //tr[not(@id)]?

-2
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 + ']'); 
       } 
6

Se siete alla ricerca di un elemento che ha classe a ma non fa hanno classe b, è possibile effettuare le seguenti operazioni.

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

Oppure, se si vuole essere sicuri di non corrispondenza parziale.

//*[contains(concat(' ', normalize-space(@class), ' '), ' some-class ') and not(contains(concat(' ', normalize-space(@class), ' '), ' another-class '))]

Problemi correlati