Tôi có một cấu trúc menu gnarly có thể được khái quát như sau:khác biệt trong kết quả trả về giữa .has() và: có()
<ul id="navigation">
<li>
A
<ul>
<li>
B
<ul>
<li>C</li>
</ul>
</li>
<li>
D
<ul>
<li>
E
<ul>
<li>F</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
Tiểu mục được ẩn cho đến khi di chuột. Tôi muốn chỉ ra rằng B, D, và E có tiểu mục bằng cách tạo kiểu cho chúng vì vậy tôi sử dụng bộ chọn:
$('#navigation > li li:has(ul)')
Mà chỉ trở lại B và D. Thay đổi nó để:
$('#navigation > li li').has('ul')
trở tất cả các mục chính xác nhưng tôi nhầm lẫn là tại sao.
EDIT
:has()
không xuất hiện để bị ảnh hưởng (hoàn toàn) bằng cách làm tổ như
$('#navigation ul > li:has(ul)')
trả về kết quả tương tự như .has()
trên.
Dường như với tôi rằng kết quả sẽ giống nhau. Tôi không biết tại sao chúng khác nhau. Có lẽ Sizzle từ bỏ tìm kiếm trong các yếu tố lồng nhau khi một trận đấu được tìm thấy. Nếu vậy, điều này dường như bỏ qua khả năng của các yếu tố lồng nhau giống hệt nhau (như bạn có trong ví dụ của bạn). – user113716