Autor | Zpráva | ||
---|---|---|---|
Poky Profil |
#1 · Zasláno: 21. 8. 2008, 23:04:09
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 |
#2 · Zasláno: 21. 8. 2008, 23:22:38 · Upravil/a: Nox
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 |
#3 · Zasláno: 21. 8. 2008, 23:25:04
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 |
#4 · Zasláno: 21. 8. 2008, 23:38:23
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 |
#5 · Zasláno: 21. 8. 2008, 23:49:09
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 |
#6 · Zasláno: 22. 8. 2008, 00:33:19 · Upravil/a: ah01
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 |
#7 · Zasláno: 22. 8. 2008, 08:12:41
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 * |
#8 · Zasláno: 22. 8. 2008, 08:56:40
> 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 |
#9 · Zasláno: 22. 8. 2008, 11:28:59
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 |
#10 · Zasláno: 22. 8. 2008, 12:14:04
pole = document.getElementsByTagName('NAZEV');
for (i in pole) {pole[i].promenna = x} |
||
Chamurappi Profil |
#11 · Zasláno: 22. 8. 2008, 12:26:16
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++). |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
#12 · Zasláno: 25. 8. 2008, 08:50:03
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 |
#13 · Zasláno: 25. 8. 2008, 10:14:34
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. |
||
Časová prodleva: 16 let
|
0