Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Zmiana ID, class
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
deha21
Potrzebuję zmienić id lub klasę dla jednego obiektu.
  1. <a href='#' class='zgas'><img src='img/lightoff.png' alt='Zgaś/Zaświeć światło'></a>

Chodzi o .zgas aby zmienił się na .zaswieć i potem na odwrót, po kliknięciu w .zaswiec żeby zmienił się na .zgas

Na razie mam taki kod:
[JAVASCRIPT] pobierz, plaintext
  1. $(".zgas").click(function(){$("#expose").expose({api: true}).load(); $(".zgas img").attr("src","img/lighton.png"); $(".zgas").addClass("zaswiec");});
  2. $(".zaswiec").click(function(){$("#expose").expose({api: true}).close(); $(".zaswiec img").attr("src","img/lightoff.png");});
[JAVASCRIPT] pobierz, plaintext


Tutaj dodatkowo zmiana obrazka i expose (obie działają tylko na włączeniu). Pomóżcie.
mls
[JAVASCRIPT] pobierz, plaintext
  1. $('.zgas').click(function () { $('#expose').expose({api: true}).load(); $(this).find('img').attr('src', 'img/lighton.png').end().removeClass('zgas').addClass('zaswiec'); });
[JAVASCRIPT] pobierz, plaintext


W takich sytuacjach brakuje w jQuery funkcjonalności zamiany jednej klasy na inną jednym poleceniem, co na szczęście można sobie łatwo dodać:
[JAVASCRIPT] pobierz, plaintext
  1. jQuery.fn.replaceClass = function(c1, c2)
  2. {
  3. return $(this).each(function () { return $(this).hasClass(c1) ? $(this).removeClass(c1).addClass(c2) : $(this); });
  4. };
[JAVASCRIPT] pobierz, plaintext


Wówczas zamiast (...).removeClass('zgas').addClass('zaswiec'); wystarczyłoby zapisać (...).replaceClass('zgas', 'zaswiec');.
deha21
Ok dwa sposoby prawie działają winksmiley.jpg Zrobiłem to tak, że najpierw remove a potem add ale niestety coś się chrzni i zamiast robić klasę "zaswiec" wpisuje " zaswiec" ze spacją na początku, chociaż w kodzie jej nie ma. Co to moze byc?
[JAVASCRIPT] pobierz, plaintext
  1. $(".zgas").click(function(){$("#expose").expose({api: true}).load(); $(".zgas img").attr("src","img/lighton.png"); $(this).removeClass("zgas").addClass("zaswiec");});
[JAVASCRIPT] pobierz, plaintext


Poczytałem na stronce jQuery i ktoś dał pomysł żeby zrobić to za pomocą:
[JAVASCRIPT] pobierz, plaintext
  1. $(this).attr("class","zaswiec")
[JAVASCRIPT] pobierz, plaintext

I zamienia bezproblemowo z tym, że potem nie działa na tym funkacja kliknięcia na tą dodaną klasę (zaswiec):
[JAVASCRIPT] pobierz, plaintext
  1. $(".zaswiec").click(function(){$("#expose").expose({api: true}).close(); $(".zaswiec img").attr("src","img/lightoff.png");});
[JAVASCRIPT] pobierz, plaintext

:/
Kyle
Jeśli zmieniasz czemuś klasę to musisz ponownie podpiąć event .click() na tą klasę, którą dodajesz.
deha21
Ponownie czyli jak? Bo jest na poniżej dopisany event po kliknięciu na to.
lord_t
Po pobieżnej analizie problemu sugeruje zmienić
Kod
$(".zaswiec").click(function(){...
na
Kod
$(".zaswiec").live('click',function(){...
i podobnie dla .zgas .
deha21
Live załatwiło sprawę wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.