| Autor | Zpráva | ||
|---|---|---|---|
| xlifer Profil |
#1 · Zasláno: 31. 7. 2011, 23:39:59 · Upravil/a: xlifer
Jak lze zapsat dovnitř obsahu další obsah bez idenfitikátoru? Vysvětlím na příkladu ...
Viz kód - když chci zapsat před <div> a za </div> obsah, jak to lze udělat? Přes innerHTML to asi nepůjde, protože nemám identifikátor a přes document.writte v JS netuším jak určit pozici v obsahu a řici funkci, že má zapsat např. za tag body a před jeho konec? Poradíte jak to lze vyřešit nebo zda to vůbec lze? <body> <!-- zde //--> <div class="blok"> obsah </div> <!-- zde //--> </body> |
||
| ShiraNai7 Profil |
#2 · Zasláno: 1. 8. 2011, 00:53:16
Funkce appendChild a prependChild
|
||
| Chamurappi Profil |
#3 · Zasláno: 1. 8. 2011, 01:02:58
Reaguji na ShiraNaiho7:
Metoda rodič.appendChild(potomek) přidává potomka jako posledního do rodiče.
Metoda prependChild existuje?
Reaguji na xlifera: Kolega měl patrně na mysli metodu rodič.insertBefore(potomek, potomek2), která přidá potomka do rodiče před potomka2.
Jde o objekty DOMu (třeba o elementy vytvořené přes document.createElement), nikoliv o HTML kódy, takže musíš postupovat trochu jinak než u innerHTML a document.write.
|
||
| ShiraNai7 Profil |
#4 · Zasláno: 1. 8. 2011, 21:05:24
Chamurappi:
„Metoda prependChild existuje?“ Máš pravdu, ne. Asi by to šlo zřídit pomocí insertBefore() (to snad už existuje :) |
||
| xlifer Profil |
#5 · Zasláno: 2. 8. 2011, 23:31:03 · Upravil/a: xlifer
Vytořil jsem něco takovýho, kde mě funguje přidání bloku dovnitř id=xbody, ale jak zařídím přes insertBefore výše popsané vůbec netuším, poradíte?
<script type="text/javascript">
function vlozBlok() {
blok = document.createElement("div");
obsah_blok = document.createTextNode("nejaky text");
blok.setAttribute("style","margin:10px;width:50px;height:50px;border:1px solid green;color:red");
blok.appendChild(obsah_blok);
document.getElementById("xbody").appendChild(blok);
}
</script>
<body>
<!-- sem vlozit //-->
<div id="xbody" style="padding:10px;width:200px;height:200px;border:1px solid black">
<a href="javascript:vlozBlok();">pridej</a>
</div>
<!-- sem vlozit //-->
</body>
|
||
| Chamurappi Profil |
#6 · Zasláno: 3. 8. 2011, 11:10:08 · Upravil/a: Chamurappi
Reaguji na xlifera:
„ale jak zařídím přes insertBefore výše popsané vůbec netuším“ Rodičem je document.body. Potomkem (přidávaným) je blok a potomkem2 (před kterého se přidává) je document.getElementById("xbody").
„blok.setAttribute“ Ty máš tuhle metodu nějak moc rád, že? :-) Nastavuj buď blok.style.jménoVlastnosti, nebo blok.className (+ uprav stylopis), nebo blok.style.cssText = "celý obsah atributu style".
|
||
| xlifer Profil |
#7 · Zasláno: 3. 8. 2011, 23:52:05 · Upravil/a: xlifer
Chamurappi:
Přidal jsem do funkce vlozBlok() následující dle doporučení a jak jsem to pochopil, ale poslední řádek mi hlásí chybu, že objekt tuto vlastnost nebo metodu nepodporuje. bodyDoc = document.getElementsByTagName('body');
xbodyDoc = document.getElementById('xbody');
bodyDoc.insertBefore(blok, xbodyDoc);Jinak metodu setAttribute nemám tak rád jak to vypadá :-) ale čerpal jsem z nějakých příkladů z Google a všude bylo setAttribute, tak jsem to použil taky... |
||
| Chamurappi Profil |
#8 · Zasláno: 4. 8. 2011, 00:13:36
Reaguji na xlifera:
Kolekce elementů (tedy něco jako pole) nemá metodu insertBefore, tu mají přímo elementy.
Nemusíš vyhledávat <body> podle jména elementu, protože je v document.body (jak jsem už uvedl minule).
|
||
| xlifer Profil |
#9 · Zasláno: 4. 8. 2011, 00:21:04 · Upravil/a: xlifer
Chamurappi:
Aha, teď už chodí, mylslel jsem, že je document.body uvedené zkráceně jako příklad a je nutné <body> vyhledat přes byTagName. Díky. Takže takhle je ok: bodyDoc = document.body;
xbodyDoc = document.getElementById('xbody');
bodyDoc.insertBefore(blok, xbodyDoc);No a tohle je tedy řešení jak to přidat na začátek nad xbody, ale jak podobně zařídit vložení za </div> bloku xbody, resp. před značku </body> ? Něco jako insertAfter asi nebude existovat, nenašel jsem... |
||
| Chamurappi Profil |
#10 · Zasláno: 4. 8. 2011, 00:33:03
Reaguji na xlifera:
Všechny elementy mají vlastnosti previousSibling a nextSibling, v nichž se nacházejí předchozí a následující sourozenec. Takže přidat element za xbodyDoc můžeš tak, že ho přidáš před následujícího sourozence xbodyDoc.
|
||
| _es Profil |
#11 · Zasláno: 4. 8. 2011, 00:36:01 · Upravil/a: _es
xlifer:
Ešte by si mal mať premenné správne definované. „před značku </body>“ No ale veď na to môžeš využiť metódu appendChild - tú už predsa poznáš (document.body.appendChild(element)).
|
||
| xlifer Profil |
#12 · Zasláno: 4. 8. 2011, 01:17:17
_es:
Není mi ještě jasné kam, resp. jak appendChild umisťuje obsah, zda nahoru nebo dolu v obsahu HTML. Nevím jestli to píšu srozumitelně. Jak appendChild určím, že má zapsat na místo ozačené A a pak B a třeba C, když bude? Když použiju doporučený zápis document.body.appendChild(element), tak to zapíše dle svého uvažení kam, nahoru nebo dolů na A nebo B? :-) Chápu to tak, že vše zapíše do body, ale v jeho rámci určení konkretního místa není definováno.... <body> <!-- misto A //--> <div> nejaky obsah </div> <!-- misto B //--> </body> |
||
| Chamurappi Profil |
#13 · Zasláno: 4. 8. 2011, 01:33:02
Reaguji na xlifera:
Metoda appendChild přidává vždy na konec. Přidaný element je posledním potomkem, jako kdyby byl v HTML napsaný před ukončovací značkou.
|
||
| _es Profil |
#14 · Zasláno: 4. 8. 2011, 07:35:49 · Upravil/a: _es
xlifer:
V tunajších príspevkoch v kódoch sa automaticky vytvárajú odkazy na dokumentáciu, dozvedel by si sa tam len presne to, čo ti napísal Chamurappi. Metóda insertBefore je všeobecnejšia, dá sa použiť rovnako ako appendChild, ak je druhý argument null. |
||
| xlifer Profil |
#15 · Zasláno: 4. 8. 2011, 10:52:00
Chamurappi:
Díky, takhle mi to stačí a pochopil jsem rozdíl appendChild a insertBefore. |
||
| xlifer Profil |
#16 · Zasláno: 4. 8. 2011, 13:05:20
A ješte mi zese nejde nastavit onclick událost, už jsem to řešil několikrát, ale asi jsem natvrdlej nebo není můj den, ale tohle mi zkrátka nejde a nevím proč?
blok.onclick = "function(){nazevFunkce(this.id);};"; |
||
| Witiko Profil |
#17 · Zasláno: 4. 8. 2011, 13:08:13 · Upravil/a: Witiko
xlifer:
blok.onclick = function(){nazevFunkce(this.id);};Pokud bys chtěl vložit funkci jako řetězec, tak se vkládá pouze tělo funkce: blok.onclick = new Function("nazevFunkce(this.id)");
// případně v html pak:
<element onclick="nazevFunkce(this.id)">Tento postup však není doporučovaný, uvádím ho pouze pro informativní účely. |
||
| Chamurappi Profil |
#18 · Zasláno: 4. 8. 2011, 13:16:51
Reaguji na xlifera:
„už jsem to řešil několikrát“ Ano, výslovně jsem tě na to tvé staré vlákno odkázal v příspěvku [#6]. |
||
| xlifer Profil |
#19 · Zasláno: 4. 8. 2011, 14:11:43 · Upravil/a: xlifer
Díky všem za pomoc a omlouvám se za případně zdvojené nebo opakovné dotazy, ale někdy mi nedocházejí věci hned :-)
Chamurappi Zase mě zradil zápis uvozovek. |
||
| xlifer Profil |
#20 · Zasláno: 4. 8. 2011, 14:20:57 · Upravil/a: xlifer
A událost onscroll nejede použít? Zkouším a nejede:
blok.onscroll = function(){nazevFunkce(this.id);}; |
||
| xlifer Profil |
#21 · Zasláno: 4. 8. 2011, 19:55:14 · Upravil/a: xlifer
Už vím: onScroll lze použít na body, textarea, cokoli s overflow.
Tudíž zkusím nastavit overflow na DIV a snad to půjde... A nejde :-( Problém je již mimo téma vlákna, ale snažím se blok zafixovat přes JS na událost onscroll, ale nedaří se mi. Je nějaký způsob, který bude fungovat od IE6 až po současnost napříč prohlížeči? Zkoušel jsem nastavit onscroll na BODY, ale nedaří se což je mi divné, když by onscroll na body fungovat měl... document.body.onscroll = function(){alert('hura');};Založil jsem na problém nové vlákno. |
||
|
Časová prodleva: 14 let
|
|||
0