Autor Zpráva
Poky
Profil
Potřebuji vybrat všechny sourozence následující za rodičem současného elementu. Pak na ně aplikovat CSS styl. Poradí prosím někdo? Díky.
Nox
Profil
mělo by to být this.childNodes

mj. nainstaluj si firefox plugin Firbug, klikni dole vpravo na jeho ikonku, v záložce HTML vyber element > pravé myšidlo > Ukázat v DOM a tak uvidíš všechny možné fígle
Nox
Profil
to si vložíš do proměnné, která se stane řetězcem a pak procházíš a dáváš styly

bla=this.chil...
for(a=0;a<bla.length);a++){

bla[a].style.color="red"

...

}
Poky
Profil
childNodes mi snad vybere potomky, ne? Ja potřebuju o element výš a zde vybrat následující sourozence (nextSiblings). A pak na ně aplikovat styl.
Poky
Profil
Asi mám smůlu, protože když kód umístím do funkce v externí souboru, tak mi nejde vybrat ani současný element. Já prostě v JavaScriptu nedělám.
ah01
Profil
Poky
Vykašli se na čistý DOM a zkus se kouknout na knihovnu jQuery.

To co potřebuješ můžeš udělat např. takto:
$(this).parent().nextAll().addClass("xyz");

To přidá všem potomkům rodiče aktuálního elementu (získaného např. z události) CSS třídu xyz.

Projdi si dokumentaci, základní použití určitě zvládneš za pár minut.
peta
Profil
Poky
'v externí souboru, tak mi nejde vybrat ani současný element'
To je asi nejaky omyl, ne?
Tohle muze nastat pouze v jedinem pripade a to, ze jsi premistil script jinam nez byl. Treba z puvodniho mista do HEAD dokumentu.
cili tam mas script neobaleny funkci, kterym se pokousis ziskat objekt jeste v HEAD u nevytvoreneho BODY.
co treba odkaz na stranku?

jinak google.com nextSiblings
a hned prvni odkaz, pokud ti primo nefunguje nextSiblings
http://www.prototypejs.org/api/element/nextSiblings
los
Profil *
> sourozence následující za rodičem současného elementu
Napr. (netestované):
for (var el = this.parentNode.nextSibling; el; el = el.nextSibling)
  if (el.nodeType == 1)
    el.className += " xyz";


> Asi mám smůlu, protože když kód umístím do funkce v externí souboru, tak mi nejde vybrat ani současný element.
To záleží od toho, ako určuješ súčasný element. Ak si to mal v atribúte onclick="alert(this)" a zmeníš to na onclick="funkcia()", tak vo funkcii už nebude this znamenať súčasný prvok. V takom prípade si musíš do tej funkcie posielať this alebo event a vytiahnuť to z neho. V tomto prípade by ale bolo lepšie zavesiť obsluhu udalostí na ten rodičovský prvok a to, ktorý element je aktuálny, určiť z udalosti (e.target || e.srcElement). Napr. (netestované):
ul.onclick = function(e) {
  e = e || window.event;

  for (var li = e.target || e.srcElement; li && li != ul; li = li.parentNode)
    if (li.tagName == "LI") {
      for (var el = li.parentNode.nextSibling; el; el = el.nextSibling)
        if (el.nodeType == 1)
          el.className += " xyz";

      break;
    }
}
Poky
Profil
Díky chlapi, to podstatný už funguje. Teď ještě napsat skript, kterej všem elementům určitého názvu nastaví jednu proměnnou.

Nox: Díky za FireBug, je to drsnej nástroj :-)
peta
Profil
pole = document.getElementsByTagName('NAZEV');
for (i in pole) {pole[i].promenna = x}
Chamurappi
Profil
Reaguji na peta:
Tvá for-in smyčka projde i pole["length"], což rozhodně není HTML element. (I když zrovna přiřazení k pole["length"].promenna žádnou chybu nevyhodí.)
V tomto případě je lepší klasický for(var i = 0; i < pole.length; i++).
peta
Profil
Chamurappi
Jo, je to lepsi. Myslim, ze v tomto pripade to ale zadny problem delat nebude, protoze je tam pouze 0-n . Pole.length by v tom obsazene byt nemelo. Nechci kecat, ale mam pocit, ze se vytvori, az kdyz je volano, podobne jako nejaky objekt u window, tusim location.href to bylo (chovalo se to jinak v IE7 a jinak ve FF2).
Chamurappi
Profil
Reaguji na peta:
Pole.length by v tom obsazene byt nemelo.
Samozřejmě mělo. Každá kolekce HTML elementů má danou svoji velikost.

mam pocit, ze se vytvori, az kdyz je volano
Nanejvýš se přepočítá, až když je volána. Je to klasická vlastnost dle terminologie OOP, nejen datový člen jako ostatní takzvané vlastnosti v JS — při jejím čtení se vykonává složitější úkon než jen prosté sáhnutí do paměti. Interpret musí vědět, že pole.length existuje, i když zatím neví, jakou hodnotu vrátí => prochází ho pomocí smyčky for-in.

tusim location.href to bylo (chovalo se to jinak v IE7 a jinak ve FF2)
Prosím o ukázku.

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: