XPath เพื่อค้นหาองค์ประกอบที่ไม่มี id หรือ class


89

ฉันจะรับองค์ประกอบ tr ทั้งหมดที่ไม่มีแอตทริบิวต์ id ได้อย่างไร

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

ขอบคุณ

คำตอบ:


148

ค่อนข้างตรงไปตรงมา:

//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 + ']'); 
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.