2009-02-19 33 views
15

Got một số mã ở đây không hoạt động:JQuery - Cách thêm một lớp vào mỗi mục danh sách cuối cùng?

$("#sidebar ul li:last").each(function(){ 
     $(this).addClass("last"); 
}); 

Về cơ bản tôi có 3 danh sách và muốn thêm một lớp (cuối cùng) cho từng hạng mục xuất hiện cuối cùng trong mỗi danh sách có thứ tự.

<ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li class="last">Item 3</li> 
</ul> 

Hy vọng điều đó có ý nghĩa, Chúc mừng!

+0

Đây có phải là lớp được thêm vào được sử dụng để thêm lề ở cuối danh sách không? Nếu vậy, bạn chỉ có thể sử dụng thuộc tính margin-bottom của ul thay thế. Nếu không, hãy tiếp tục. = P – EndangeredMassa

+0

Ngoài ra, bạn không cần phải làm '.each' trong trường hợp này, bạn chỉ có thể thực hiện' .addClass' trực tiếp. jQuery sẽ áp dụng tất cả các lệnh cho toàn bộ các phần tử phù hợp. – cdmckay

+0

Ngoài ra, một trang web tốt để kiểm tra các bộ chọn khác nhau và xem cách chúng hoạt động có thể được tìm thấy tại đây: http://www.woods.iki.fi/interactive-jquery-tester.html – cdmckay

Trả lời

36

Dễ sai lầm để thực hiện. Hãy thử điều này:

$("#sidebar ul li:last-child").addClass("last"); 

Về cơ bản: cuối cùng không hoàn toàn làm những gì bạn nghĩ. Nó chỉ phù hợp với cuối cùng trong tài liệu, không phải là cuối cùng trong mỗi danh sách. Đó là những gì: đứa trẻ cuối cùng là cho.

+0

cảm ơn mẹo, không bao giờ vấp phải bây giờ – smoothdeveloper

+0

Hoàn hảo! - Cảm ơn đã dành thời gian giúp tôi giao phối, đánh giá cao nó –

+0

rất nhiều thông tin, cảm ơn! – Heihachi

-1

bạn có thể thử

$('#sidebar ul li:last').addClass('last'); 
3

Lý do không hoạt động do thực tế là :last chỉ khớp với một phần tử. Từ tài liệu jQuery:

Khớp phần tử được chọn cuối cùng.

Vì vậy, những gì mã của bạn đang làm là nhận được một tập của tất cả các <li> yếu tố trong một <ul> và sau đó từ đó thiết lập lấy giá trị cuối cùng. Ví dụ:

<ul> 
    <li>1</li> 
    <li>2</li> 
</ul> 
<ul> 
    <li>3</li> 
    <li>4</li> 
</ul> 
<ul> 
    <li>5</li> 
    <li>6</li> 
</ul> 

Mã của bạn sẽ trả về phần tử <li>6</li>. (Bên trong, nó sẽ thu thập <li>1</li> đến <li>6</li> và sau đó lop ra khỏi cái cuối cùng và trả lại).

Những gì bạn đang tìm kiếm là những câu trả lời khác ở đây đã nói: :last-child.

0

Hoặc bạn có thể cung cấp cho danh sách của bạn một id và sử dụng nó như một ngữ cảnh để jquery-call.

<ul id="myList"> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
</ul> 

<ul id="anotherList"> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
</ul> 

Và sau đó bạn có thể làm:

jQuery("li:last", "ul#myList").addClass("lastItem"); 

Bây giờ li cuối cùng trong danh sách đầu tiên sẽ có lớp học "lastItem".

Chỉnh sửa: Xin lỗi, đã đọc câu hỏi. Bỏ qua điều này.

4

với jquery thêm này

$("ul li").last().addClass('last'); 
0

Nếu bạn cần phải thêm lớp 3 danh sách riêng biệt bạn có thể gán một lớp cho họ và sử dụng 'từng':

$('#sidebar ul.class li:last-child').each(function(e){ 
    $(this).addClass("last"); 
}); 

này nên hoạt động chính xác như Bạn mong đợi.

Các vấn đề liên quan