XPath, um Elemente zu finden, die keine ID oder Klasse haben


88

Wie kann ich alle tr-Elemente ohne id-Attribut erhalten?

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

Vielen Dank

Antworten:


147

Ziemlich einfach:

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

Das gibt Ihnen alle trElemente, denen sowohl idals auch classAttribute fehlen . Wenn Sie möchten, dass allen trElementen eines der beiden fehlt, verwenden Sie oranstelle von and:

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

Wenn Attribute und Elemente auf diese Weise verwendet werden und das Attribut oder Element einen Wert hat, wird es so behandelt, als ob es wahr wäre. Wenn es fehlt, wird es so behandelt, als ob es falsch wäre.


22

Wenn Sie nach einem Element suchen, das eine Klasse hat , aaber keine Klasse hat b, können Sie Folgendes tun.

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

Oder wenn Sie sicher sein möchten, dass Sie nicht teilweise übereinstimmen.

//*[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 + ']'); 
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.