jquery đổi tên lớp


336

Tôi muốn thay đổi lớp của thẻ td được cung cấp id của thẻ td:

<td id="td_id" class="change_me"> ...

Tôi muốn có thể làm điều này trong khi bên trong sự kiện nhấp chuột của một số đối tượng dom khác. Làm cách nào để lấy id của td và thay đổi lớp của nó?

Câu trả lời:


704

Bạn có thể thiết lập lớp (bất kể đó gì ) bằng cách sử dụng .attr(), như thế này:

$("#td_id").attr('class', 'newClass');

Nếu bạn muốn thêm một lớp, sử dụng .addclass()thay thế, như thế này:

$("#td_id").addClass('newClass');

Hoặc một cách ngắn để trao đổi các lớp bằng cách sử dụng .toggleClass():

$("#td_id").toggleClass('change_me newClass');

Đây là danh sách đầy đủ các phương thức jQuery dành riêng cho classthuộc tính .


Xin chào @Nick, thêm trình xử lý sự kiện tìm cha mẹ td đầu tiên [ var $td = $(this).parents('td:first')] sau đó lấy id [ var id = $td.attr('id');] và cả lớp [ var class = $td.attr('class');] vì anh ta muốn một phần tử nhấp chuột bên trong TD để kích hoạt nó
Bob Fincheimer

@Bob - Tôi không theo dõi, bạn lấy từ đâu, một câu hỏi khác? Người này nói rằng anh ta có ID của phần tử :) Ngoài ra, để có được cha mẹ, bạn có thể sử dụng .closest('td')thay vì .parents('td:first'):)
Nick Craver

1
câu cuối cùng của anh ấy: I want to be able to do this while inside the click event of some other dom object. How do I grab the td's id and change its class?- có lẽ tôi đang đọc sai, có lẽ anh ấy có nghĩa là sử dụng id của td để thay đổi lớp ...
Bob Fincheimer

1
@ Bob - Ngay ... một số khác đối tượng DOM, bạn đang giả định đối tượng đó là bên trong <td>trong câu hỏi :)
Nick Craver

Lưu ý rằng change_mephần này là tùy chọn nếu bạn sử dụngtoggleClass()
sakisk

93

Tôi nghĩ rằng bạn đang tìm kiếm điều này:

$('#td_id').removeClass('change_me').addClass('new_class');

32

Tôi nghĩ rằng anh ấy muốn thay thế một tên lớp.

Một cái gì đó như thế này sẽ làm việc:

$(document).ready(function(){
    $('.blue').removeClass('blue').addClass('green');
});

từ http://monstertut.com/2012/06/use-jquery-to-change-css- class /


Nhưng anh ấy muốn làm điều đó bên trong sự kiện nhấp chuột của một số đối tượng dom khác
keyer

9

Bạn có thể làm điều này: $("#td_id").removeClass('Old_class'); $("#td_id").addClass('New_class'); Hoặc bạn có thể làm điều này

$("#td_id").removeClass('Old_class').addClass('New_class');


6

Vì vậy, bạn muốn thay đổi nó khi nó được nhấp ... hãy để tôi thực hiện toàn bộ quá trình. Giả sử rằng "Đối tượng DOM bên ngoài" của bạn là một đầu vào, giống như chọn:

Hãy bắt đầu với HTML này:

<body>
  <div>
    <select id="test">
      <option>Bob</option>
      <option>Sam</option>
      <option>Sue</option>
      <option>Jen</option>
    </select>
  </div>

  <table id="theTable">
    <tr><td id="cellToChange">Bob</td><td>Sam</td></tr>
    <tr><td>Sue</td><td>Jen</td></tr>
  </table>
</body>

Một số CSS rất cơ bản:

​#theTable td {
    border:1px solid #555;
}
.activeCell {
    background-color:#F00;
}

Và thiết lập một sự kiện jQuery:

function highlightCell(useVal){
  $("#theTable td").removeClass("activeCell")
      .filter(":contains('"+useVal+"')").addClass("activeCell");
}

$(document).ready(function(){
    $("#test").change(function(e){highlightCell($(this).val())});
});

Bây giờ, bất cứ khi nào bạn chọn một cái gì đó từ lựa chọn, nó sẽ tự động tìm một ô có văn bản phù hợp, cho phép bạn lật đổ toàn bộ quá trình dựa trên id. Tất nhiên, nếu bạn muốn làm theo cách đó, bạn có thể dễ dàng sửa đổi tập lệnh để sử dụng ID thay vì giá trị bằng cách nói

.filter("#"+useVal)

và đảm bảo thêm id một cách thích hợp. Hi vọng điêu nay co ich!


4

BIÊN TẬP:

Nếu bạn nói rằng bạn đang thay đổi nó từ một yếu tố lồng nhau , bạn hoàn toàn không cần ID. Bạn có thể làm điều này thay vào đó:

$(this).closest('td').toggleClass('change_me some_other_class');
    //or
$(this).parents('td:first').toggleClass('change_me some_other_class');

Câu trả lời gốc:

$('#td_id').removeClass('change_me').addClass('some_other_class');

Một lựa chọn khác là:

$('#td_id').toggleClass('change_me some_other_class');

Tôi không nghĩ OP bên trong <td>, mặc dù anh ta có thể, đọc lại cẩn thận :)
Nick Craver

@Nick - Vâng, tôi đã thêm bản cập nhật vì tôi đã đọc lại và thấy rằng OP đang hỏi "Làm thế nào để tôi lấy id của td và thay đổi ..." . Điều này khiến tôi tin rằng OP không xử lý ID, điều này sẽ khiến câu trả lời ban đầu của tôi không hữu ích lắm. Vì điều này, tôi giả sử phần tử với trình xử lý được lồng vào nhau. Nhưng nó chắc chắn là một giả định.
dùng113716

2

Trong trường hợp bạn đã có một lớp và cần xen kẽ giữa các lớp thay vì thêm một lớp, bạn có thể xâu chuỗi các sự kiện:

$('li.multi').click(function(e) {
    $(this).toggleClass('opened').toggleClass('multi-opened');
});

2
$('.btn').click(function() {
    $('#td_id').removeClass();
    $('#td_id').addClass('newClass');
});

or

$('.btn').click(function() {
    $('#td_id').removeClass().addClass('newClass');
});

1

phương pháp này hiệu quả với tôi

$('#td_id').attr('class','new class');

Làm cho một số chi tiết về nó.
máy bay

0

thay đổi lớp bằng cách sử dụng jquery

thử cái này

$('#selector_id').attr('class','new class');

bạn cũng có thể đặt bất kỳ thuộc tính nào bằng truy vấn này

$('#selector_id').attr('Attribute Name','Attribute Value');

-1

Tôi tốt hơn nên sử dụng .prop để thay đổi className và nó hoạt động hoàn hảo:

$(#td_id).prop('className','newClass');

đối với dòng mã này, bạn chỉ cần thay đổi tên của newClass và tất nhiên là id của phần tử, trong ví dụ tiếp theo: idelementinyourpage

$(#idelementinyourpage).prop('className','newClass');

Nhân tiện, khi bạn muốn tìm kiếm kiểu nào được áp dụng cho bất kỳ phần tử nào, bạn chỉ cần nhấp vào F12 trên trình duyệt của bạn khi trang của bạn được hiển thị, sau đó chọn trong tab DOM Explorer, phần tử bạn muốn xem. Trong Kiểu bây giờ bạn có thể thấy kiểu nào được áp dụng cho phần tử của bạn và từ đó đọc lớp nào.

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.