Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Zmiana klasy
Forum PHP.pl > Forum > Przedszkole
Dapi
Witam.

Najpierw kod, potem objaśnienie:

  1. <div id="abc">
  2. <ul class="abc">
  3. <li class="abc slot0">
  4. /**zawartosc**/
  5. </li>
  6. <li class="abc slot2">
  7. /**zawartosc**/
  8. </li>
  9. <li class="abc slot3">
  10. /**zawartosc**/
  11. </li>
  12. </ul>
  13. </div>


Chciałbym zmienić klasę li np. "abc slot0" na "abc slot1".
Próbowałem:

Kod
document.getElementsByClassName('abc slot0')[0].className='abc slot1'

Nie działa.

Kod
document.getElementsByClassName('slot0')[0].className='slot1'

Nie działa.

Dodam, że html'a nie mogę edytować, mogę używać tylko js.

Być może to jest banalne pytanie, ale liczę na waszą pomoc smile.gif
gorden
[JAVASCRIPT] pobierz, plaintext
  1. document.getElementsByClassName('abc slot0')[0].setAttribute('class', 'abc slot1');
[JAVASCRIPT] pobierz, plaintext
Dapi
Gorden, podane przez ciebie rozwiązanie działa, jeśli dany element ma tylko 1 klasę.
Niestety jak ja mam "abc" i "slot0" to już nie działa w żaden sposób.
mortus
U mnie działa zarówno pierwszy skrypt, który podałeś, jak i rozwiązanie zaproponowane przez gordena. Na pewno wykonujesz ten skrypt?
Dapi
Na 100%. Tak jak mówię, problemu nie ma, kiedy element ma 1 klasę. Problem pojawia się kiedy klasy są 2.
Tak samo jest kiedy z jquerowym addClass()
nospor
Cytat
Tak samo jest kiedy z jquerowym addClass()
Eeee, coś kręcisz, z jQuery to się robi banalnie i powinno działać nie zależnie od liczby klas:
Kod
jQuery('.szukana').removeClass('szukana').addClass('nowa');
Dapi
Może i powinno... sad.gif
Ma znaczenie, że skrypt uruchamiam poprzez Greasemonkey?
nospor
Nie wiem jak działa greasmonkey to nie odpowiem.
A napisałeś dokładnie taki sam kod jak ci podałem?
Bo jak znam życie to ludzie lubią usunąć jeden znak a potem: nie działa....
Dapi
Zmieniłem jedynie nazwy klas na odpowiednie.
nospor
Pokaz kod. Nie wierzę Ci - nie bierz tego do siebie, po prostu kieruję się dotychczasowymi przypadkami na forum smile.gif
Dapi
Wiem, wiem, ludzie lubią kombinować smile.gif.
Trochę mnie denerwuje, kiedy coś musi działać, u wszystkich działa, a u mnie nie. No ale taki urok języków smile.gif


Kod
jQuery('.slot0').removeClass('slot0').addClass('slot1');
jQuery('.friends').removeClass('friends').addClass('slot1');

Wyżej mam tylko bibliotekę JQuery.

Klasa friends jest zastąpiona przez slot1 po wykonaniu skryptu, a slot0 pozostaje bez zmian.
nospor
Zobacz w konsoli Firebuga co zwraca kod:
console.log(jQuery('.slot0'));
Dapi
C:\Users\Dapi\Desktop\/Znajomi: [object Object]
nospor
No ale rozwin ten OBJECT i zobacz czy on zawiera ten element z klasą.
Jak nie to znaczy ze w momemencie wywoływania tego kodu ten element html jeszcze nie istnieje
Dapi
Może głupie pytanie, ale w jaki sposób mam to rozwinąć?
Nie mam tam nic klikalnego.
zegarek84
zainstaluj sobie firebug i tam w konsoli błędów sprawdź co i jak...

poza tym czy aby na pewno masz dołączone jQuery do userscript?? - masz atrybut @require ze ścieżką do jQuery?? - atrybut ten musi być ustawiony przy instalacji skryptu - jeśli go dodawałeś później to skrypt musisz odinstalować i zainstalować jeszcze raz... a jeśli kożystasz z jQuery które już jest zawarte na stronie i nie dołączasz go do userscriptów to unsafeWindow by się do niego dobrać...
var $ = unsafeWindow.jQuery;


Use jQuery in a GreaseMonkey script

EDIT
poza tym źle stosujesz getElementsByClassName - podajesz klasę a spacja jest separatorem klas więc aby znaleźć elementy o klasie slot0 musisz napisać:
document.getElementsByClassName('slot0')
Dapi
Firebuga mam, podałem po mi zwraca console.log(jQuery('.slot0'));.
To jest jedyne co mi zwraca. nie mam nic klikalnego, żeby więcej informacji podać.

JQuery mam zawarte w pliku razem z resztą skryptu.
JQuery działa, bo jeśli mam pojedynczą klasę to bez problemu ją zmieniam.
Tyle, że ja walczę z obiektem, który ma 2 klasy...
zegarek84
jak już wyżej pod edit napisałem to nie robi różnicy czy masz 1 czy 100 klas - nazwy poszczególnych klas gdy są oddzielone spacjami to są dodatkowe klasy - nie szukasz przez atrybut a przez wartość klasy!!! a jesli już chcesz przez atrybut to jest też możliwość zapisania w selektorach css podanie wartości atrybutu ale to nie na temat...
Dapi
Jest mały postęp. Podszedłem trochę inaczej do tego i nie szukam już slot0.

document.getElementsByClassName('abc')[0].setAttribute('class', 'abc slot1');

To działa.
Przed wykonaniem class="abc slot0"
Po wykonaniu class="abc slot1 slot0"

Teraz chciałbym usunąć slot0, ale...
jQuery('.abc').removeClass('slot0');
jQuery('.slot0').removeClass('slot0');
nie działają sad.gif
gorden
spróbuj abc slot0 usunąć skoro tak definiujesz
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.