XPath để tìm các phần tử không có id hoặc lớp


88

Làm cách nào để lấy tất cả các phần tử tr mà không có thuộc tính id?

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

Cảm ơn

Câu trả lời:


147

Khá đơn giản:

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

Điều đó sẽ cung cấp cho bạn tất cả các tryếu tố thiếu cả hai idclassthuộc tính. Nếu bạn muốn tất cả các tryếu tố thiếu một trong hai, hãy sử dụng orthay vì and:

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

Khi các thuộc tính và phần tử được sử dụng theo cách này, nếu thuộc tính hoặc phần tử có một giá trị thì nó được coi là đúng. Nếu thiếu nó được coi như là sai.


22

Nếu bạn đang tìm kiếm một phần tử lớp anhưng không có lớp b, bạn có thể làm như sau.

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

Hoặc nếu bạn muốn chắc chắn không khớp từng phần.

//*[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 + ']'); 
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.