Autor Zpráva
pou
Profil *
Dobrý den,
chtěl bych se zeptat jak přistoupit k potomkovi, např, mám toto:
<div id="rodic">
<div id="potomek">neco</div>
<div id="potomek2">text</div>
</div>
<div id="rodic2">
<div id="potomek">neco</div>
<div id="potomek2">neco</div>
</div>
a potreboval bych nahradit "text"
zatim to delam pomoci
document.getElementById("rodic").getElementsByTagName("div")[1].innerHTML="x";

což sice funguje ale nelíbí se mi přístup přez to pole, když pak prohodím potomky tak budu muset menit hodnotu toho pole. proto bych potřeboval poradit jestli nemuzu vyuzit to vnorené id např. nějak takto - bohuzel to nefunguje:
document.getElementById("rodic").getElementById("potomek2").innerHTML="x";

Předem děkuji za odpověď
Chamurappi
Profil
Reaguji na poua:
. proto bych potřeboval poradit jestli nemuzu vyuzit to vnorené id
Ne, metoda getElementById existuje jen na documentu.

nelíbí se mi přístup přez to pole, když pak prohodím potomky tak budu muset menit hodnotu toho pole
Můžeš si ten element uložit do nějaké proměnné a v té ho pak budeš mít pořád, nehledě na to, kam ho přesuneš.
Witiko
Profil
Chamurappi:
Ne, metoda getElementById existuje jen na documentu.
Přesně tak, přišel jsem na to také nedávno, když jsem pročítal dokumentaci metod na manipulaci s DOM. Je to na druhou stranu logické, ID by mělo být unikátní pro celý dokument.
Chamurappi
Profil
Reaguji na Witika:
Hlavně je to pro tvůrce prohlížeče implementačně jednodušší, stačí jedna hešovací tabulka pro celý dokument, nemusí vyhodnocovat kontext.
pou
Profil *
Děkuji za rychle a konstruktivní odpovědi,
ještě mě tak napadlo, kdybych tedy použil u potomku místo ID třídu class, tak abych dodžel to že id má být unikátní, tak by se dalo k tomu nějak přistoupit? Tak abych mohl říct, že chci od třicátého rodiče druhého potomka??
<div id="rodic">
<div class="potomek">neco</div>
<div class="potomek2">text</div>
</div>
<div id="rodic2">
<div class="potomek">neco</div>
<div class="potomek2">neco</div>
</div>
Witiko
Profil
pou:
document.getElementById("rodic30").getElementsByClassName("potomek2")[0];

Uvědom si, že getElementsByClassName nemá plnou podporu prohlížečů. Pokud nevyžaduješ className pro styly, doporučuji použít jednoduše name.
<div name="rodic"> 
<div name="potomek">neco</div> 
<div name="potomek">text</div> 
</div> 
<div name="rodic"> 
<div name="potomek">neco</div> 
<div name="potomek">neco</div> 
</div>
...

document.getElementsByName("rodic")[29].getElementsByName("potomek")[1];

Samozřejmě potomky můžeš pod rodičem vyhledávat i bez jejich explicitního označení.

document.getElementsByName("rodic")[29].getElementsByTagName("div")[1];


Případně použitím (zatím implementačně slabého) query selektoru:

document.querySelectorAll("[name=rodic]:nth-child(30) > div:nth-child(2)");
joe
Profil
pou:
dybych tedy použil u potomku místo ID třídu class, tak abych dodžel to že id má být unikátní, tak by se dalo k tomu nějak přistoupit?

Já bych to udělal tak, že na element s id zavolam metodu getElementsByTagName('*'), která vrátí všechny elementy v uvnitř daného elementu a ty pak projdu a porovnám třídu.
Chamurappi
Profil
Reaguji na Witika:
doporučuji použít jednoduše name
Na <div>u? Pochybuju, že to bude spolehlivě fungovat ve všech prohlížečích.
pou
Profil *
Ok všem zapojeným děkuji za vysvětlení!!
Witiko
Profil
Chamurappi:
Je tu nějaký problém s vyhledáváním elementů na základě atributu v případě divu? Nikdy jsem se s takovým problémem nesetkal.
Chamurappi
Profil
Reaguji na Witika:
Není to hledání na základě atributu, ale hledání na základě jména. Elementy, u kterých nemá atribut name žádný význam (tedy ani význam jména), nemají jméno, takže není jisté, že se najdou. Ono ti to snad u <div>ů funguje v nějaké verzi Exploreru?
Witiko
Profil
Chamurappi:
Ještě nikdy jsem popravdě necítil potřebu to zkoušet. :)

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