2012-06-25 26 views
5

Im đấu tranh với mục này. Tôi có một danh sách các mục và trên một phần của mẫu khi một cái gì đó đã xác nhận nó thêm lớp "kiểm tra" vào mục danh sách tương ứng.jQuery đếm các mục với lớp "đã chọn"

<ul> 
<li class="title">Checklist</li> 
<li class="checkType checked">Card Type</li> 
<li class="checkNumber checked">Card Number</li> 
<li class="checkName checked">Name on Card</li> 
<li class="checkMonth checked">Expiry Month</li> 
<li class="checkYear checked">Expiry Year</li> 
<li class="checkCode checked">Security Code</li> 
</ul> 

.title{font-size:23px; font-weight:bold;} 
.checked{ color:#f00;} 

Nhưng tôi cần jQuery để kiểm tra xem mỗi mục có lớp checked EXCEPT title.

Điều này có thể thực hiện được không?

Demo:http://jsfiddle.net/bQtEQ/1/

Nhờ câu trả lời bây giờ tôi có những điều sau

 var counting = $("li.checked:not(.title)").length; 
    if (counting == 6){ 
     console.log(counting); 
    } 
+8

Đôi khi, bạn nhìn vào các câu hỏi và bạn tự hỏi tại sao không có 10 câu trả lời ... và bạn chờ đợi thêm một giây ... bùng nổ! –

+0

có thể trùng lặp của [yếu tố đếm Jquery theo lớp cách tốt nhất để thực hiện điều này là gì?] (Http://stackoverflow.com/questions/2727303/jquery-counting-elements-by-class-what-is-the-best -way-to-implement-this) – Esailija

+0

Không phải là bản sao cả. – Archer

Trả lời

9

Đây là doable với 1 selector đơn giản

$("li.checked:not(.title)").length 

Lợi thế ở đây, ngoài việc phải viết mã ít hơn, là bộ chọn :not() là yếu tố trong trong tìm kiếm để giảm tập kết quả. Điều này có nghĩa là ít thời gian hơn cho jQuery để khởi tạo các phần tử dom. Điều này có nghĩa là thời gian thực hiện nhanh hơn, đặc biệt là trên các trình duyệt cũ hơn.

8

này nên cung cấp cho bạn tất cả các yếu tố <li> với lớp 'checked' mà không có tiêu đề lớp học:

$('li.checked').not('.title').length 

Tuy nhiên - nếu bạn chỉ muốn số phần tử đã chọn:

$('.checked').length 

đủ.

+0

Có lợi thế khi làm theo cách này, thay vì chỉ sử dụng bộ chọn trong câu trả lời của Ben? – Archer

+0

Thêm 'li' làm cho nó nhanh hơn ban đầu, nhưng lọc không sau khi thực tế làm chậm nó xuống. Sẽ là thú vị để chuẩn mực cho chắc chắn. –

+3

@Archer 'Ben' của câu trả lời là nhanh hơn nhiều, bởi vì nó sử dụng [querySelectorAll] (https://developer.mozilla.org/en/DOM/Element.querySelectorAll), đó là bản địa javascript. – Engineer

1
$('.checked').not('.title').length == $("ul li").length -1 
0
$("li").each(function() { 
    if(!$(this).hasClass("title") && $(this).hasClass("checked")) { 
      alert("hah"); 
    } 
}); 
Các vấn đề liên quan