2013-03-08 29 views
6

Tôi có một vài mục trong một danh sách và muốn nhấn mạnh một trong những người dùng nhấp vào bằng cách áp dụng một số phong cách css, có thể là một màu nền, vvLàm cách nào để đánh dấu một mục danh sách được chọn bằng jquery?

HTML của tôi trông như thế này:

<ul class="thumbnails"> 
    <li> 
     <a href="#" class="thumbnail"> 
      <img class="giftthumb" src='thumb1.jpg' alt=""> 
      <span class="gifttitle">Thumb1</span> 
     </a>  
    </li> 
    <li> 
     <a href="#" class="thumbnail"> 
      <img class="giftthumb" src='thumb2.jpg' alt=""> 
      <span class="gifttitle">Thumb3</span> 
     </a>  
    </li> 
    <li> 
     <a href="#" class="thumbnail"> 
      <img class="giftthumb" src='thumb3.jpg' alt=""> 
      <span class="gifttitle">Thumb3</span> 
     </a>  
    </li> 
</ul> 

jQuery để lấy mục đã chọn:

$('.thumbnail').click(function(e) { 
    e.preventDefault(); 

    ??? 

}) 

Trả lời

14

Bạn có thể sử dụng jQuery class management methods (cụ thể là addClass()removeClass() trong trường hợp này) để thêm một lớp về mục đã chọn và loại bỏ các lớp tương tự từ tất cả các mặt hàng khác (nếu bạn muốn chỉ có một lựa chọn tại một thời điểm).

//save class name so it can be reused easily 
//if I want to change it, I have to change it one place 
var classHighlight = 'highlight'; 

//.click() will return the result of $('.thumbnail') 
//I save it for future reference so I don't have to query the DOM again 
var $thumbs = $('.thumbnail').click(function(e) { 
    e.preventDefault(); 
    //run removeClass on every element 
    //if the elements are not static, you might want to rerun $('.thumbnail') 
    //instead of the saved $thumbs 
    $thumbs.removeClass(classHighlight); 
    //add the class to the currently clicked element (this) 
    $(this).addClass(classHighlight); 
}); 

Sau đó, trong CSS của bạn chỉ cần thêm:

.highlight { 
    background-color: cyan; 
    font-weight: bold; 
} 

jsFiddle Demo

Đây là một giải pháp tốt hơn so với thay đổi thuộc tính CSS trực tiếp từ jQuery/Javascript (với phương pháp .css() chẳng hạn), vì tách mối quan tâm sẽ làm cho mã của bạn dễ quản lý và dễ đọc hơn.

+0

Tôi chưa bao giờ thấy cú pháp như thế này chỉ định biến cho hàm ... (ví dụ: $ thumbs =) – Paul

+2

@Paul Tôi đã thêm một số nhận xét để giải thích điều đó. '$ thumbs' về cơ bản sẽ giữ kết quả của' $ ('. thumbnail') ', bởi vì trong jQuery hầu hết các phương thức sẽ trả về bộ sưu tập jQuery để cho phép chuỗi. Tôi đã làm điều này bởi vì sau đó bên trong trình xử lý nhấp chuột, tôi không phải truy vấn lại DOM cho các phần tử '.thumbnail', tôi đã có chúng. Nếu các phần tử đang thay đổi (ý tôi là đã thêm/xóa), do đó không tĩnh, phương thức này không được sử dụng, bạn nên truy vấn lại DOM. – kapa

+0

Tuyệt vời, cảm ơn thông tin. Tôi luôn luôn tìm hiểu trên trang web này :) – Paul

1
$('.thumbnail').click(function(e) { 
    e.preventDefault(); 
    $(this).css('background-color', 'red'); 
}) 
1

??? bạn sẽ là:

$('.thumbnail').removeClass('selected'); 
$(this).addClass('selected'); 

Sau đó, tất cả những gì bạn phải làm là xác định lớp css 'đã chọn' của bạn.

1

Nếu bạn không cần hoạt độngdai dẳng đây là một cách CSS:

li:focus{ 
 
    background: red; 
 
} 
 
li:active{ 
 
    background: gold; 
 
}
<ul> 
 
    <li tabindex="1">Item 1</li> 
 
    <li tabindex="1">Item 2</li> 
 
    <li tabindex="1">Item 3</li> 
 
</ul> 
 

 
Now click <b>here</b> and see why it's not persistent.

trong một số tình huống trên có thể có ích - để chỉ đánh dấu mục "hiện hoạt nhấp chuột" hiện tại & hellip;

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