2010-03-08 12 views

Respuesta

88

Bastante sencillo:

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

que le dará todos los elementos que carecen de ambos trid y class atributos. Si desea que todos tr elementos que carecen de uno de los dos, utilizar or en lugar de and:

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

Cuando los atributos y los elementos se utilizan de esta manera, si el atributo o elemento tiene un valor se trata como si es verdad . Si falta, se trata como si fuera falso.

+0

¿El 'o' ejemplo de trabajo. Dado que es un negativo en contra? –

6

Se puede tratar //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

Si lo que buscas es un elemento que tiene clase a pero no lo hace tienen clase b, puede hacer lo siguiente.

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

O si usted quiere estar seguro de no coincidencia parcial.

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

Cuestiones relacionadas