2010-08-10 32 views
268

Chcę zmienić klasę znacznika td danym id TD tagu:jquery nazwa klasy zmiana

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

Chcę być w stanie to zrobić, gdy wewnątrz zdarzenia click jakiegoś innego obiektu DOM. Jak pobrać identyfikator td i zmienić jego klasę?

Odpowiedz

566

Można ustawić klasę (niezależnie od tego, co to był) za pomocą .attr(), tak:

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

Jeśli chcesz dodać klasę, użyj .addclass() zamiast, jak to :

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

lub krótki sposób, aby zamienić klas używając .toggleClass():

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

Here's the full list of jQuery methods specifically for the class attribute.

+0

Hej @Nick, dodać moduł obsługi zdarzeń, która znajdzie pierwszy td rodzica [ 'var $ td = $ (this) .parents (” td: first ') '] następnie pobiera jego identyfikator [' var id = $ td.attr (' id ');]], a także klasa ['var class = $ td.attr (' class ');'], ponieważ on chce elementu kliknięcia wewnątrz TD, aby go uruchomić –

+0

@Bob - Nie podążam, skąd masz to, inne pytanie? Ten mówi, że ma identyfikator elementu :) Również aby uzyskać rodzica można użyć '.closest ('td')' zamiast '.parents ('td: first')' :) –

+0

jego ostatnie zdanie: ' Chcę móc to zrobić podczas zdarzenia click jakiegoś innego obiektu DOM. Jak mogę pobrać identyfikator td i zmienić jego klasę? '- może czytam to źle, może on oznacza użycie identyfikatora td do zmiany klasy ... –

4

EDIT:

Jeśli mówisz, że jesteś zmieniając go z zagnieżdżonego elementu, nie trzeba identyfikator w ogóle. Można to zrobić w zamian:

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

Oryginalny odpowiedź:

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

Inną opcją jest:

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

Nie sądzę, że OP-y wewnątrz' ', chociaż mógłby być, ponownie przeczytaj uważnie :) –

+0

@Nick - Tak, ja dodano aktualizację, ponieważ przeczytałem ją ponownie i zobaczyłem, że OP pyta * "Jak pobrać identyfikator td i zmienić ..." *. To doprowadziło mnie do przekonania, że ​​OP nie ma uchwytu na identyfikatorze, co sprawiłoby, że moja oryginalna odpowiedź nie byłaby bardzo pomocna.Biorąc to pod uwagę, zakładam, że element z obsługą jest zagnieżdżony. Ale z pewnością jest to założenie. – user113716

74

myślę szukasz to:

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

Więc chcesz go zmienić, kiedy jest kliknięty .. pozwól mi przejść przez cały proces. Załóżmy, że "Zewnętrzne DOM obiektu" jest wejściem, jak select:

Zacznijmy od tego HTML:

<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> 

Niektóre bardzo podstawowe CSS:

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

i skonfigurować zdarzenie jQuery:

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

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

Teraz, gdy wybierzesz coś z listy wyboru, automatycznie odnajduj komórkę z pasującym tekstem, umożliwiając przekreślenie całego procesu opartego na identyfikatorze. Oczywiście, jeśli chcesz zrobić to w ten sposób, można łatwo zmodyfikować skrypt do użycia identyfikatorów zamiast wartości mówiąc

.filter("#"+useVal) 

i upewnij się, aby dodać identyfikatory odpowiednio. Mam nadzieję że to pomoże!

8

Można zrobić to: $("#td_id").removeClass('Old_class'); $("#td_id").addClass('New_class'); Albo można to zrobić

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

W przypadku, że masz już klasa i trzeba na przemian między klasami przeciwstawiać się dodaniu klasy, możesz przełączać zdarzenia łańcuchowe:

$('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'); 
}); 
0

ta metoda działa dobrze dla mnie

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

Proszę podać szczegółowe informacje na jego temat. – aircraft