Autor Zpráva
ph@tE
Profil *
V javascriptu nejsem zrovna zběhlý a tak se ptám:

function findElements(elName, parentEl)
{
elName = elName.toLowerCase();
elChildNodes = parentEl.childNodes;
childElements = new Array();

for (i = 0; i < elChildNodes.length; i++)
{
if (elChildNodes[i].nodeName.toLowerCase() != elName)
childElements = childElements.concat(findElements(elName, elChildNodes[i]));
else
childElements = childElements.push(elChildNodes[i]);
}

for (i = 0; i < childElements.length; i++)
window.alert(childElements[i].nodeName + " zakl: " + parentEl.nodeName);

return childElements;
}

Toto je funkce, která by měla rekurzivně najít všechny elementy daného jména v nějakém elementu.

Např.
el = document.getElementById("main");
findElements("a", el);

by mělo najít všechny odkazy v elementu s id main (i ty které jsou vnořené v jiných elementech elementu s id main). Bohužel to funguje tak, že jakmile se zavolá funkce findElements() rekurzivně, tak ukončí cyklus ve funkci findElements, která ji zavolala.

Např. v HTML kódu
<menu id="main">
<li><a href="#">Odkaz</a></li>
<li><a href="#">Odkaz</a></li>
</menu>

nalezne funkce findElements() pouze první odkaz...
los
Profil *
Nenájde náhodou iba ten druhý odkaz? Premennú childElements si nikde nedeklaroval pomocou slova var ako lokálnu, teda je globálna. Takže pri každom zavolaní funkcie findElements ju nainicializuješ ako prázdne pole...

Skúšal si už niečo takéto?
var el = document.getElementById("main");
el.getElementsByTagName("a");
ph@tE
Profil *
Jo sry, já už to nepotřebuju, vyřešil jsem to jinou fcí. Jinak díky, můžete to tu kllidně zamknout...

los
Díky, tak by to pravděpodobně taky šlo, jak říkám, přes JS jsem začátečník.

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: