Làm thế nào để có được lớp của phần tử được nhấp?


228

Tôi không thể tìm ra làm thế nào để có được classgiá trị của phần tử được nhấp.

Khi tôi sử dụng mã dưới đây, tôi nhận được "nút-205" mỗi lần.

jQuery:

.find('> ul')
.tabs(
{
    selectedClass: 'active',
    select: function (event, ui) {
        //shows only the first element of list
        $(this).children('li').attr('class');
    },
    cookie: { expires: 0 },
    fx: fx
})

HTML:

<ul class="tabs">
  <li class="node-205"></li>
  <li class="node-150"></li>
  <li class="node-160"></li>
</ul>

Câu hỏi của bạn không rõ ràng ... bạn có đang sử dụng bất kỳ plugin jquery nào không?
jrharshath

Nếu đó là một mục được nhấp, bạn có nên sử dụng hàm click () để liên kết sự kiện và nhận lớp không? Có lẽ tôi đã không hiểu đầy đủ về câu hỏi ...
e-satis

Câu trả lời:


396

Đây là một ví dụ jQuery nhanh có thêm một sự kiện nhấp chuột vào mỗi thẻ "li" và sau đó lấy thuộc tính lớp cho phần tử được nhấp. Hy vọng nó giúp.

$("li").click(function() {
   var myClass = $(this).attr("class");
   alert(myClass);
});

Tương tự, bạn không phải bọc đối tượng trong jQuery:

$("li").click(function() {
   var myClass = this.className;
   alert(myClass);
});

Và trong các trình duyệt mới hơn, bạn có thể nhận được danh sách đầy đủ các tên lớp :

$("li").click(function() {
   var myClasses = this.classList;
   alert(myClasses.length + " " + myClasses[0]);
});

Bạn có thể mô phỏng classListtrong các trình duyệt cũ hơn bằng cách sử dụngmyClass.split(/\s+/);


1
"class" không phải là tên biến hợp lệ.
Fred Bergman

1
Một trong những tình huống hài hước trong đó jQuery là con đường dài. this. className sẽ cung cấp cho bạn giống như $ (this) .attr ("class")
David Gilbertson

Nếu phần tử có nhiều hơn một tên lớp thì sao?
Dharman

1
Không chắc tại sao nhưng ví dụ thứ 2 không thể lấy tên lớp cho tôi. Tuy nhiên, ví dụ đầu tiên hoạt động tuyệt vời! Cảm ơn! Giúp tôi một tấn. :)
Chiefwarpaint

38
$("li").click(function(){
    alert($(this).attr("class"));
});

28

Tôi thấy câu hỏi này vì vậy tôi nghĩ rằng tôi có thể mở rộng về nó nhiều hơn một chút. Đây là một bản mở rộng của ý tưởng mà @SteveFenton đã có. Thay vì ràng buộc một clicksự kiện với từng liyếu tố, sẽ hiệu quả hơn khi ủy thác các sự kiện từ phía uldưới.

Dành cho jQuery 1.7 trở lên

$("ul.tabs").on('click', 'li', function(e) {
   alert($(this).attr("class"));
});

Tài liệu: .on()

Đối với jQuery 1.4.2 - 1.7

$("ul.tabs").delegate('li', 'click', function(e) {
   alert($(this).attr("class"));
});

Tài liệu: .delegate()

Như một phương sách cuối cùng cho jQuery 1.3 - 1.4

$("ul.tabs").children('li').live('click', function(e) {
   alert($(this).attr("class"));
});

hoặc là

$("ul.tabs > li").live('click', function(e) {
   alert($(this).attr("class"));
});

Tài liệu: .live()


17

Cái này cần phải dùng mẹo:

...
select: function(event, ui){ 
   ui.tab.attr('class');
} ,
...

Để biết thêm thông tin về ui.tab, hãy xem http://jqueryui.com/demos/tabs/#Events


Điều đó có nghĩa là gì? Bạn có thể giải thích điều đó nhiều hơn?

Đó là ui.tab thay vì ui.item bạn cần sử dụng. Tôi nghĩ đó là ui.item.
jeroen.verhoest

11

Tất cả các giải pháp được cung cấp buộc bạn phải biết yếu tố bạn sẽ nhấp trước . Nếu bạn muốn lấy lớp từ bất kỳ phần tử nào được nhấp, bạn có thể sử dụng:

$(document).on('click', function(e) {
    clicked_id = e.target.id;
    clicked_class = $('#' + e.target.id).attr('class');
    // do stuff with ids and classes 
    })

2
Cần lưu ý rằng nếu nhận được một id là không đáng tin cậy, người ta luôn có thể sử dụng $(e.target)thay vì $('#' + e.target.id)và jQuery vẫn sẽ xử lý trường hợp này một cách hợp lý.
BobChao87

9
$("div").click(function() {
  var txtClass = $(this).attr("class");
  console.log("Class Name : "+txtClass);
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.