« 1 2
Autor Zpráva
Nadan
Profil
Chamurappi:
Jo, bohužel jsem se toho dopustil. Nechci totiž měnit stav <div>u, přes který projíždí kursor... (Jsem idiot)
Když vezmu

onmouseover="this.className = 'zobrazit'

Tak bych potřeboval změnit "this" na <div>(například <div>2), který je obsažen v <div>u(například <div>1) s událostí onmouseover. "This" se dá přepsat na <div>2 pomocí ID (například "text" -> text.className). Ale já ho potřebuji vyjádřit jinak než IDčkem, jelikož ID je unikátní na jedné stránce a já bych měl na jedné stránce více sérií [<div>1<div>2].
Chápeš? :'(
Joker
Profil
Nadan:
Tak bych potřeboval změnit "this" na <div>(například <div>2)
To není třeba. Chamurappiho řešení bude fungovat, s příslušným CSS a je to i lepší než to moje (jsem se nějak moc zafixoval na ten Javascript).
Nastylování vnořeného <div>u jde i přes CSS (vnořený <div> by měl třídu „vnoreny“):
div.zobrazit div.vnoreny{ display: block; }

edit: Analogicky pro třídu schovat, HTML viz Chamurappiho příspěvek
Chamurappi
Profil
Reaguji na Nadana:
Nechci totiž měnit stav <div>u, přes který projíždí kursor
Chceš.

změnit "this" na <div>(například <div>2), který je obsažen v <div>u(například <div>1) s událostí onmouseover
Vztah těch <div>ů ale nedokážeš slovně vyjádřit tak, aby to pochopil někdo, kdo by ti poradil, jak ho zapsat do JS. Tak si ho vyjádři sám v CSS.
Nadan
Profil
Joker, Chamurappi:
Hoši, miluju vás. Díky moc, všechno funguje :-)

Ukázka - mamlas.yc.cz
Nadan
Profil
Ne, nefunguje. Zapomněl jsem, že ten <div>, ve kterém je vnořený druhý <div>, musí mít class. Pak to nějak blbne... Bohužel nerozumím, co tomu ten kód udělá, ani když ten <div> má ID místo classu, jinak bych si s tím pohrál.
mamlas.yc.cz
Tori
Profil
Koukněte se sem, jak se dá měnit jen jedna třída, když jich má prvek víc: Odkaz
_es
Profil
Nadan:
Ak prvok úplne skryješ, tak sa skryje aj ten okolitý <div>, lebo nič iné neobsahuje a potom už druhá udalosť neprebehne, viď: www.jakpsatweb.cz/css/display.html.
Zrejme ti treba asi na skrytie použiť zmenu visibility.
Nadan
Profil
_es:
Hm, vyzkoušel jsem všechny varianty a nejde to...
_es
Profil
Nadan:
Rozmysli si, kedy máš v akom elemente aké triedy a css vlastnosti definované.
Ak nejakému elementu nastavíš className, tak zrušíš pôvodné nastavenie triedy.
Ak mu chceš nastaviť viac tried, tak ich oddeľ medzerami v nastavení triedy.
Nadan
Profil
_es:
Nechápu, co tím chceš říct...
_es
Profil
Nadan:
Nechápu, co tím chceš říct...
To, že si zrušil obrázok v pozadí aj pri onmouseover aj pri onmouseout.
Nadan
Profil
_es:
Takže aby se mi nezrušil, mám mu přiřadit další třídu? To mi nepomůže, když to onmouseover a onmouseout zase přepíše, ne?
Chamurappi
Profil
Reaguji na Nadana:
Zkus prosím trochu přemýšlet. Potřebné informace jsi už dostal. Víš, jak se zapisuje víc tříd do atributu class, víš, jak změnit atribut class
Nadan
Profil
Chamurappi:
V tom případě jsem dementní, nenapadá mě co ještě více můžu zkusit... Když dám tomu obalovacímu <div>u více tříd, tak se mi stejně změní obě... Už 3 dny se v tom hrabu každý den a nenapadá mě řešení. Pokud ho znáš, tak mi k tomu řekni třeba více, dej mi více nápověd. Celý kód po tobě nechci (i když by to bylo nejrychlejší řešení problému).
_es
Profil
Nadan:
Když dám tomu obalovacímu <div>u více tříd, tak se mi stejně změní obě
Tak to predsa musíš zmeniť tak, aby sa ti zmenilo, len to čo chceš, aby sa zmenilo a aby zostalo to, čo má zostať.
element.className = "prváTrieda druháTrieda";
Nadan
Profil
_es:
Nechápu. Myslíš to takhle?
HTML:
<div class="prvníTřída druháTřída" onmouseover="this.className = 'zobrazit';" onmouseout="this.className = 'schovat';">
	<div class="třetíTřída">
		Text text text
	</div>
</div>
<div class="prvníTřída druháTřída" onmouseover="this.className = 'zobrazit';" onmouseout="this.className = 'schovat';">
	<div class="třetíTřída">
		Text text text
	</div>
</div>

CSS:
div.prvníTřída,div.druháTřída {
visibility: visible;
}

div.zobrazit div.třetíTřída {
visibility: visible;
}

div.schovat div.třetíTřída {
visibility: hidden;
}
_es
Profil
Nadan:
Myslíš to takhle?
Nie, myslím v JS kóde, presne tak, ako to tam je napísané, this je ten element, o ktorý ide.
Nadan
Profil
_es:
this.className = 'zobrazit'
Ale co tam mám ještě dát za třídu a co k ní napsat? Když tam napíšu "třetíTřída", tak se přiřadí všem divům, i tom obalovacím, i tom v něm. To znamená, že budou úplně stejné...
_es
Profil
Nadan:
this.className = 'zobrazit';
Objekt elementu, na ktorý ukazuje this, sa zobrazuje len a len podľa triedy zobrazit.
Ak chceš, aby sa zobrazoval súčasne podľa viacerých tried, tak to nastavíš:
this.className = 'zobrazit preklopit roztocit rozblikat rozvibrovat';

Ale co tam mám ještě dát za třídu
To, čo chceš, aby tá trieda robila, napríklad zobrazovala alebo skrývala niektoré prvky vo vnútri toho elementu, na ktorý sa aplikuje.

Když tam napíšu "třetíTřída", tak se přiřadí všem divům, i tom obalovacím, i tom v něm.
Nie, priradí sa presne len tomu elementu, na ktorý sa aplikuje. Ak sa ti zdá niečo iné, tak si zopakuj, ktoré CSS vlastnosti sa ako dedia.
Nadan
Profil
_es:
Ak chceš, aby sa zobrazoval súčasne podľa viacerých tried, tak to nastavíš:
1
this.className = 'zobrazit preklopit roztocit rozblikat rozvibrovat';

Nechci, aby se zobrazoval současně podle více tříd. Stačí mi jedna třída, která ho skryje/zobrazí.

To, čo chceš, aby tá trieda robila, napríklad zobrazovala alebo skrývala niektoré prvky vo vnútri toho elementu, na ktorý sa aplikuje.

No, mám tam jednu třídu, která má ten element skrýt/zobrazit podle toho, jestli kurzor zrovna je/není na tom elementu obalujícím tento element.

Nie, priradí sa presne len tomu elementu, na ktorý sa aplikuje. Ak sa ti zdá niečo iné, tak si zopakuj, ktoré CSS vlastnosti sa ako dedia.

Očividně se mi přiřadí k oboum divům: Ukázka. Proto mizí oba a ne jen jeden.

EDIT: Drobné úpravy.
_es
Profil
Nadan:
Očividně se mi přiřadí k oboum divům: Ukázka. Proto mizí oba a ne jen jeden.
Nie, priradí sa len jednému, vyskúšaj sa k tým divom dostávať z viacerých strán.
Ak jeden div zmizne, tak sa v dôsledku toho môže dostať kurzor myši nad druhý, čo môže spôsobovať mylný dojem.

Nechci, aby se zobrazoval současně podle více tříd. Stačí mi jedna třída, která ho skryje/zobrazí.
Ale chceš, máš tam atribút class="img omg", takže logicky chceš, aby účinok týchto dvoch tried pri zobrazení a skrytí zostal. Ak má ich účinok zostať, a nastavuješ v JS className, tak musia v tom textovom reťazci v className tiež byť.
Nadan
Profil
_es:
Chci, aby ten obalovací div zůstal takový jaký je, ale aby on vyvolával tu JAVASCRIPT akci (onmouseover, onmouseout), který ovlivňuje VNORENY div.
Ten (div s třídou VNORENY) se má zobrazovat a skrývat.
Co mám teda napsat do JAVASCRIPT událostí v obalovací divu? Kterému divu mám přiřadit kolik tříd?

To je vše!
Chamurappi
Profil
Reaguji na Nadana:
Chceš změnit atribut class <div>u, přes který přejíždí myš. Nic víc JavaScript dělat nepotřebuje. Zobrazování/skrývání už je věcí CSS, klidně si tam dej prozatím změnu barvu, pokud tě zneviditelňování příliš rozptyluje.
Nadan
Profil
Chamurappi:
Chceš změnit atribut class <div>u, přes který přejíždí myš.
Ne, nechci. Chci změnit class <div>u, který je vnořený v <div>u, přes který kurzor přejíždí. Jinak bych napsal onmouseover a onmouseout rovnou do toho vnořeného <div>u...
Nadan
Profil
Chamurappi:
To by nemělo smysl, když ten <div>, který chci skrývat/zobrazovat zabírá asi polovinu toho obalujícího <div>u...
_es
Profil
Nadan:
Kterému divu mám přiřadit kolik tříd?
Koľko ti len dovoľuje fantázia.
JS vlastnosť className nastaví len presne to a nič iné, než čo nastavuje atribút class.
Ak v HTML kóde nejakému elementu prepíšeš class=trieda1 na class=trieda2, tak sa snáď nebudeš čudovať tomu, že sa potom toho elementu trieda1 vôbec netýka. Že sa napríklad obrázkové pozadie, definované v trieda1 zruší. A presne rovnako je to aj cez JS vlastnosť className.

Chci změnit class <div>u, který je vnořený v <div>u, přes který kurzor přejíždí.
Keďže si nebol schopný definovať vzťah, na základe ktorého by sa na ten vnorený div dalo odkázať, tak ti Chamurappi poradil alternatívny a aj lepší a všeobecnejší postup.

Chci změnit class <div>u, který je vnořený v <div>u, přes který kurzor přejíždí.
Nie, chceš zobraziť alebo skryť elementy vo vnútri iného elementu.
A to sa aj cez zmenu množiny tried toho obaľovacieho elementu.
Nadan
Profil
_es:
A to sa dá aj cez zmenu množiny tried toho obaľovacieho elementu.
Ahááá! Tak v tom to celé je. Problém byl v tom, že jsem nechápal, co dělá ten kód, který Chamurappi psal na začátku. Díky za vysvětlení, už všechno běží, jak má. Děkuji všem za vaše rady a trpělivost se mnou :-)
« 1 2

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0