Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
#1 · Zasláno: 11. 9. 2010, 18:38:46
Zdravím Vás. Nefunguje mi skrytí odstavce <p>. Pokud v JS funkcích, které uvádím níže, vynechám .document.getElementsByTagName("p"), tak skrývání (i odkrývání) funguje. Já bych to ale potřeboval upravit tak, aby to bralo pouze ID tagu <p>, nikoli tagu <h3>. Můžu sice dát tagu <h3> jiné ID, čímž by se to vyřešilo (to mám vyzkoušené a funguje to), ale přece jen bych rád z toho vycucnul pouze to <p> s příslušným ID. Poradíte mi, co s tím ? Předem díky.
function makeVisible(pID) { document.getElementById(pID).document.getElementsByTagName("p").style.visibility = "visible"; } function makeHidden(pID) { document.getElementById(pID).document.getElementsByTagName("p").style.visibility = "hidden"; } HTML kód pro jeden kompletní box vypadá takto: <div class="catBox" onclick="document.location='/adresar/'" onmouseover="makeVisible('cat-1')" onmouseout="makeHidden('cat-1')"> <h3 id="cat-1"><a href="/adresar/"> NADPIS </a></h3> <p id="cat-1"> <a href="/adresar/podadresar1/"><span>odkaz 1</span></a> <a href="/adresar/podadresar2/"><span>odkaz 2</span></a> <a href="/adresar/podadresar3/"><span>odkaz 3</span></a> <a href="/adresar/podadresar4/"><span>odkaz 4</span></a> </p> </div> |
||
Witiko Profil |
#2 · Zasláno: 11. 9. 2010, 18:48:29 · Upravil/a: Witiko
Toto nelze udělat. Různým prvkům nelze přiřadit shodné id, id je míněn jako unikátní identifikátor daného elementu, tímto způsobem se používá name.
id - Unikátní identifikátor, příslušný element lze vyhledat pomocí documentElement.getElementById(String id) name - Identifikátor, který může příslušet skupině prvků. Stojí na něm například input radio buttony, nebo css (kde lze však danou funkčnost nahradit pomocí className). Příslušné elementy lze vyhledat pomocí documentElement.getElementsByName(String name) K funkcím: document.getElementById(pID).document.getElementsByTagName("p").style.visibility = "visible"; Toto nebude fungovat, pokud není element s daným id iframe (tzn. pointer na window objekt stránky v iframe). Objekt document dědí pouze globální objekt window, proto zde odkazujete na atribut jménem document, který nalezený element nebude obsahovat. Navíc nelze měnit styl všem objektům najednou, funkce getElementsByTagName nenavrací pointer na element, nýbrž pole nalezených elementů, kterým můžete (musíte) procházet cyklem. Toto by mělo fungovat lépe: document.getElementById(pID).getElementsByTagName("p")[index v navráceném poli].style.visibility = "visible"; I s cyklem: var elementy = document.getElementById(pID).getElementsByTagName("p"); for(var index = 0; index < elementy.length; index++) { elementy[index].style.visibility = "visible"; } Každopádně toto řešení silně nedoporučuji. Používat k tomuto cyklus je vysoce neelegantní a naprosto nepotřebné obzvlášť ve vašem případě, kdy vám (podle všeho) jde o skrytí / zobrazení jednoho elementu. |
||
Mufna Profil |
#3 · Zasláno: 11. 9. 2010, 18:53:35
Witiko
Takže mi tedy nezbývá než jinak pojmenovat ID u tagu <h3> ? To mě mrzí. Je pravda, že tohle function makeVisible(pID) { document.getElementById(pID).style.visibility = "visible"; } <div class="catBox" onclick="document.location='/adresar/'" onmouseover="makeVisible('cat-1')" onmouseout="makeHidden('cat-1')"> <h3 id="nejak-jinak-nez-cat-1"><a href="/adresar/"> NADPIS </a></h3> <p id="cat-1"> <a href="/adresar/podadresar1/"><span>odkaz 1</span></a> <a href="/adresar/podadresar2/"><span>odkaz 2</span></a> <a href="/adresar/podadresar3/"><span>odkaz 3</span></a> <a href="/adresar/podadresar4/"><span>odkaz 4</span></a> </p> </div> funguje spolehlivě |
||
Witiko Profil |
#4 · Zasláno: 11. 9. 2010, 19:00:24 · Upravil/a: Witiko
Jak už jsem se zmínil, můžete, pokud chcete operovat se skupinou objektů, pracovat s atributem name namísto id. Nebo uzavřít celou skupinu prvků do jednoho bloku s určitým id.
Jinak v mém předchozím příspěvku vám v druhé polovině vysvětluji, proč skrývání nefunguje (odkazujete na neexistující atribut). Předpokládám, že funkce voláte s atributem "catBox". V tom případě po funkční stránce shodná id dvou podřazených elementů ani nevadí. Ta vadí "pouze" celkově. Jednoduše dva tagy nemohou mít stejné id. |
||
panther Profil |
#5 · Zasláno: 11. 9. 2010, 19:01:34
Mufna:
JS není moje silná stránka, ale nejde v JS zaměřit ten nadpis a odstavec kontextově přes rodičovský element, který by jediný měl ID? Mám pocit, že by to jít mělo. |
||
Witiko Profil |
#6 · Zasláno: 11. 9. 2010, 19:07:07 · Upravil/a: Witiko
|
||
Časová prodleva: 14 let
|
0