Witam.
Najpierw kod, potem objaśnienie:
/**zawartosc**/
/**zawartosc**/
/**zawartosc**/
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
gorden
7.07.2011, 11:39:44
document.getElementsByClassName('abc slot0')[0].setAttribute('class', 'abc slot1');
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
7.07.2011, 12:57:30
U mnie działa zarówno pierwszy skrypt, który podałeś, jak i rozwiązanie zaproponowane przez gordena. Na pewno wykonujesz ten skrypt?
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
7.07.2011, 13:09:01
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');
Może i powinno...

Ma znaczenie, że skrypt uruchamiam poprzez Greasemonkey?
nospor
7.07.2011, 13:16:47
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....
Zmieniłem jedynie nazwy klas na odpowiednie.
nospor
7.07.2011, 13:19:29
Pokaz kod. Nie wierzę Ci - nie bierz tego do siebie, po prostu kieruję się dotychczasowymi przypadkami na forum
Wiem, wiem, ludzie lubią kombinować

.
Trochę mnie denerwuje, kiedy coś musi działać, u wszystkich działa, a u mnie nie. No ale taki urok języków

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
7.07.2011, 13:24:40
Zobacz w konsoli Firebuga co zwraca kod:
console.log(jQuery('.slot0'));
C:\Users\Dapi\Desktop\/Znajomi: [object Object]
nospor
7.07.2011, 13:29:58
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
Może głupie pytanie, ale w jaki sposób mam to rozwinąć?
Nie mam tam nic klikalnego.
zegarek84
7.07.2011, 13:38:10
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 scriptEDIT
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')
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
7.07.2011, 13:46:49
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...
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ą
gorden
7.07.2011, 14:40:08
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.