Autor Zpráva
xlifer
Profil
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
Funkce appendChild a prependChild
Chamurappi
Profil
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
Chamurappi:
Metoda prependChild existuje?

Máš pravdu, ne. Asi by to šlo zřídit pomocí insertBefore() (to snad už existuje :)
xlifer
Profil
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
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
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
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
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
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
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
_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
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
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
Chamurappi:

Díky, takhle mi to stačí a pochopil jsem rozdíl appendChild a insertBefore.
xlifer
Profil
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
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
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
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
A událost onscroll nejede použít? Zkouším a nejede:

blok.onscroll = function(){nazevFunkce(this.id);};
xlifer
Profil
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.

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:

0