Autor Zpráva
Pajuc
Profil *
Dobrý den,

máte někdo zkušenost s metodou insertBefor?

Potřebuji totiž vložit nový řádek na začátek tabulky ale IE6 mi hlásí, že objekt danou vlastnost nebo metodu nepodporuje :(

Zde je kód:


<?xml version="1.0" encoding="charset=iso-8859-2"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<script type="text/javascript">
/* <![CDATA[ */
function foo()
{
acttr=document.getElementById("start");
newtr=document.createElement("tr");
newtd=document.createElement("td");
newtd.appendChild(document.createTextNode("Ahoj"));
newtr.appendChild(newtd);
alert();
document.getElement("parent").insertBefore(newtr,acttr);
}
/* ]]> */
</script>

</head>
<body>

<table id="parent">
<tr id="start">
<th class="prvni">Zápis</th>
</tr>
</table>
<button onclick="foo()"></button>

</body>
</html>
izsak
Profil
Chybu máš tu: document.getElement("parent").insertBefore(newtr,acttr);

Chýba ti tam celý názov funkcie:

document.getElementById("parent").insertBefore(newtr,acttr);
izsak
Profil
http://msdn.microsoft.com/library/?url=/workshop/author/dhtml/referenc e/objects/table.asp

Je tu zoznam metód podporovaných v elemente <table>. Patrí medzi ne aj insertBefore.
Fred
Profil
Musíš vygenerovat i thead je to nějaký divný IE bug http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=8&topic=81 84

<script type="text/javascript">
/* <![CDATA[ */
function foo(){
thead=document.createElement("thead");
tr=document.createElement("tr");
td=document.createElement("td");
td.appendChild(document.createTextNode("Ahoj"));
thead.appendChild(tr);
tr.appendChild(td);
document.getElementById("parent").appendChild(thead);
}
/* ]]> */
</script>

<table id="parent">
<tr><th class="prvni">Zápis</th></tr>
</table>
<button onclick="foo()"></button>
Fred
Profil
izsak Bez <thead> to fakt nejede, už jsem nad tím jednou dvě hoďky strávil a nechápal jsem, viz odkazovaná diskuse.
peta
Profil *
http://www.quirksmode.org/dom/cms.html

Podle mne ten script, co mas napsany, funguje tak, ze:

on click se spusti foo,
ktery vytvori TR
a to se pokusi vlozit pred elemet s ID="parent", coz je v tvem pripade table.
Takze hned za body vlozi TR, pak nasleduje table a v ni nejake dalsi tr...
Navic mi neni jasny tento prikaz:
getElement("parent")
asi to melo byt
getElementByID("parent")

Priste si zkus vysledek scriptu nechat zobrazit do textarea
neco=...
<textarea id="xxx"></textarea>
getElementByID("xxx").value=neco;

Pak tu mas moznost ve Firefox DOM inspektor (kdyz ne standard, pak jako rozsireni, ja to mam)

Pak je tu ve FF moznost oznacit cast dokumentu a pravym tlacitkem s nechas zobrazit zdroj vyberu, coz zobrazi prave aktivni kod.
Pri klasickem zobrazit drojovy kod, ti to zobrazi puvodni htm, coz te nezajima.
Fred
Profil
Tady v tom příkladu createElement('table') : http://www.pxl8.com/createElement.html to koukám taky píše o tom <tbody> z <thead> je to stejný
Pajuc
Profil *
Díky všem za pomoc.

>asi to melo byt getElementByID("parent")
Ne, mělo to být getElementById("parent") ;-) Než jsem to sem poslal, tak jsem to dvakrát zkontroloval a stejně jsem to měl blbě. To je k vzteku.

Pajuc
peta
Profil *
Pajuc
proto si tyhle veci resim vlastni funkci :)
function objGet(x) {return document.getElementById(x)}
function cre(x) {return document.createElement(x)}

A pak to vypada uz i docela fajn
---Z---
acttr=document.getElementById("start");
newtr=document.createElement("tr");
newtd=document.createElement("td");
newtd.appendChild(document.createTextNode("Ahoj"));
newtr.appendChild(newtd);
document.getElement("parent").insertBefore(newtr,acttr);
---Na---
var a,b,c;
a=objGet("start");
b=cre("tr");
c=cre("td");
c.appendChild(document.createTextNode("Ahoj"));
b.appendChild(c);
objGet("parent").insertBefore(b,a);

(pro nezasveceneho samo neprehledne, ale tak jde o delku kodu a jednoduchost. Urcite jednopismenkove je jednodussi nez 5 znakove zkratky)

Jinak sory za to ID, rikam, mam vlastni funkci a kod nepisi z hlavy, obvykle kopiruji :)
Fred
Profil
peta To jsem si taky zvyknul, někde byla inspirace v nějakém kódu, a tak při delších scriptech používám

var d=document;
function getHtml(){return d.getElementsByTagName('html')[0];}
function getHead(){return d.getElementsByTagName('head')[0];}
function getBody(){return d.getElementsByTagName('body')[0];}
function getId(id){return d.getElementById(id);}
function getVal(id){return getId(id).value;}
function getSty(id){return getId(id).style;}
function creEl(el){return d.createElement(el)}
function creTN(el){return d.createTextNode(el)}
MKS J-no
Profil *
popierdolone:/
Anonymous
Profil *
<?xml version="1.0" encoding="charset=iso-8859-2"?>
peta
Profil *
Pajuc
Mozna te bude zajimat takova nesmysla...
xatchat.sk - registrace - login - vstup do chatu a dole pod menu je "test ppx"
tam je asi 12k JS , ktery cely chat obstarava.
Zjistil jsem, ze IE textnode "\n" nepovazuje za node a mi nefungovalo insertBefore. Takze sem tam dal pocitani nodu a bud append nebo insert
Toto téma je uzamčeno. Odpověď nelze zaslat.