Chọn <li>
yếu tố mà không có <a>
con bằng cách sử dụng :has
và :not
selector:
$("li:not(:has(a))").addClass("current");
jsFiddle
- EDIT -
Trong khi điều này có thể là giải pháp ngắn nhất, dễ đọc sang một bên, nó chắc chắn không phải là giải pháp tốt nhất liên quan đến tốc độ.
Với ý nghĩ đó, tôi khuyên bạn nên kiểm tra một số lớn answer được cung cấp bởi @bazmegakapa.
Do đây là một cái gì đó bạn (hoặc bất cứ ai khác trong đó có tôi) có thể kết thúc sử dụng nhiều hơn một lần, tôi đã mở rộng jQuery một chút với plugin này/phương pháp mà bạn có thể sử dụng để DRY mã của bạn:
jQuery.fn.thatHasNo = function(element, method) {
if (typeof method === "undefined" || method === null) method = "children";
return this.not(function() {
return $(this)[method](element).length;
});
};
nào bạn có thể gọi với:
$("li").thatHasNo("a").addClass("current");
Phần mở rộng này sẽ, theo mặc định (nếu đối số thứ hai phương pháp là không được thông qua), kiểm tra xem có bất kỳ hậu duệ trực tiếp (children) mà trận đấu cung cấp selector. Tuy nhiên, bạn có thể cung cấp bất kỳ đối số tree-traversal parameter nào làm phương thức thứ hai cho phương thức. Vì vậy, điều này có thể được viết bằng một trong các cách sau:
$("li").thatHasNo("a", "children").addClass("current");
//...
$("li").thatHasNo("a", "find").addClass("current");
//...
$("li").thatHasNo(".class", "siblings").addClass("lame");
Tôi đã cập nhật jsFiddle để phản ánh điều đó.
Điều này sẽ chỉ hoạt động nếu 'li' không có phần tử con nào cả. Ý tôi là, OP chỉ muốn những người không có con 'a'. – kapa