Autor | Zpráva | ||
---|---|---|---|
Martin__ Profil * |
#1 · Zasláno: 28. 4. 2007, 18:42:54
Otázku jsem položil doprostřed kódu. Dík |
||
venca12 Profil |
#2 · Zasláno: 29. 4. 2007, 12:31:01
Protože jsi v kódu někde úplně jinde.
Uvědom si, že přiřazením funkce na událost onclick se ta funkce neprovede ihned a ani se neprovede na tom místě, kde ji přiřazuješ. V této části kódu tu funkci prostě jenom vytvoříš, přiřadíš, atp. ale voláš ji (spouštíš) na úplně jiném místě kódu v úplně jiný čas. Nehledě na to ve funkci nemůžeš používat lokální proměnné z jiné části programu. A asi tam máš i logickou chybu. Předpokládám, že chceš aby se po kliknutí na th, jeho obsah změnil na "Kliknuto". Zkus tam tedy napsat: kolace[i].getElementsByTagName("th")[0].onclick = function() {To způsobí, že kliknutí na element změní obsah (innerHTML) jeho samého. |
||
Martin_ Profil * |
#3 · Zasláno: 29. 4. 2007, 13:43:34
venca12
už je mi to jasné. Díky. Opravdu jsem po kliknutí chtěl změnit obsah tabulky s třídou "kolcek". Ještě před přečtením tvé odpovědí, jsem se to celé snažil aplikovat zde http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=8&topic=49 200 Jak tedy dostat proměnnou kolace[i] od té funkce? |
||
venca12 Profil |
#4 · Zasláno: 29. 4. 2007, 15:56:02
Ok, tak tam logickou chybu nemáš. Předpokládám teda, že po kliknutí na th chceš změnit obsah tabulky v níž je to inkriminované th obsaženo.
K tomu doporučuju dvě věci. Nainstaluj si do firefoxe FireBug aktivuj ho, klikni na inspect vyber ten th element v pravy okynku přepni na DOM, najdi vlastnost parentNode, rozklikni ji a určitě něco napadne. Kžy tedy potom budeš psát tu onclick funkci v th elementu, napíšeš tam this.parentNode.innerHTML = '*fuck*';a tím nastavíš obsah elementu table. Btw. nedoporučuju používat innerHTML, protože jsem s tím měl myslím že na ie nějaký problémy. Raději používej DOM funkce, pro vytváření elementů createElement, appendChild, removeChild, createTextNode, firstNode, lastNode, atd., atd. mrkni někam na javascript referenci. |
||
Martin_ Profil * |
#5 · Zasláno: 29. 4. 2007, 17:42:59
mrkni někam na javascript referenci
Kde ji prosím najdu? Dík za FireBug, problém jsem s ním vyřešil. Mám ještě jeden problém. Rád bych zničil jeden div a na tom samém místě v kódu vytvořil odstavec, jak by se to dalo provést? Dík |
||
Martin_ Profil * |
#6 · Zasláno: 29. 4. 2007, 19:59:28
Zkoušel jsem to nějak takto:
data = "<p>ahoj</p>"; var div = document.getElementById("text1"); div.replaceChild(data, this); ale to nefunguje. |
||
venca12 Profil |
#7 · Zasláno: 29. 4. 2007, 21:40:23
Houuu, chlape, jasně že to nefunguje. Všechny ty metody, které jsem ti nahoře zvýraznil pracují s objekty DOMu, ne s řetězcem (i když ten je v js také objekt, ale to je jiná pohádka).
Pokud budeš chtít nahradit div v dokumentu, musíš nejdříve najít jeho rodiče a referenci na div a vytvořit element nový. Tzn element, který má v childNodes zahrnutý ten inkriminovaný div, div samotný a element p. Pokud máš ve stránce třeba něco jako tohle (li je rodič divu) pak už jen stačí provést následující kus kódu Rodiče divu můžeš získat i jinými způsoby, bez použití funkce getElementById, by to šlo třeba i pomocí div.parentNode. Tohle asi nebude nejčistší řešení (nahrazený objekt asi zůstane v paměti), ale na to sere pes. Reference -> google "javascript reference" |
||
Martin_ Profil * |
#8 · Zasláno: 29. 4. 2007, 22:46:59
venca12
Díky moc, dneska jsem se s Tebou hodně naučil. Ale mám stále jeden problém. Rád bych nahradil div HTML kódem, který mám uložený v javascriptové proměnné. Obsah té proměnné bude vždy jiný, takže nemůžu začít tím, že vytvořím element p. Jak postupovat pak? |
||
venca12 Profil |
#9 · Zasláno: 30. 4. 2007, 09:27:28
div.textContent, div.innerHTML (tady bych se jejich použití nebál, pokud se bude jednat skutečně o text a ne o html kód.
|
||
Martin_ Profil * |
#10 · Zasláno: 30. 4. 2007, 10:45:24
venca12
právě že by se mělo jednat o html kód |
||
Martin_ Profil * |
#11 · Zasláno: 30. 4. 2007, 12:45:09
Mám tento kód
[pre<html> <script type="text/javascript"> window.onload = function() { function kal() { var kalendare = document.getElementsByTagName("table"); for(i=0; i<kalendare.length; i++) { if(kalendare[i].className == "calendar") { mesic = kalendare[i].getElementsByTagName("th")[0].firstChild.data; var rodic = kalendare[i].getElementsByTagName("thead")[0]; var co = rodic.getElementsByTagName("tr")[0]; var elm = document.createElement("tr"); elm.innerHTML = "<th>Text obalený TH</th>"; rodic.replaceChild(elm, co); } } } kal(); } </script> </head> <body> <table class="calendar"> <thead> <tr> <th colspan="7">Říjen 2007</th> <!-- tahle část se nahradí obsah proměnné elm --> </tr> </thead> </table> </body> </html>][/pre] Pro provedení scriptu se kód změní na
ale obalení textu tagem TH zmizí, jak to? |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0