Avatar billede michaelthomassen Nybegynder
12. september 2007 - 14:33 Der er 4 kommentarer og
1 løsning

DOM browser problem

Jeg har følgende javascript kode på min side;

row = document.getElementById('Table').rows[1].cloneNode(true);
tmp = document.createTextNode('Hallo');
row.cells[1].appendChild(tmp);

Dette virker fint i Opera, men fejler i IE ('row.cells.1' is null or not an object).

Jeg har prøvet denne kode, som igen virker fint i Opera, men ikke i IE:
row = document.getElementById('Table').rows[1].cloneNode(true);
alert(row.cells[1].align); //giver "center"
alert(document.getElementById('Table').rows[1].cells[1].align); // fejler

Nogen der har et bud på hvorfor?
Avatar billede olebole Juniormester
12. september 2007 - 20:29 #1
<ole>

row = document.getElementById('Table').getElementsByTagName("tr")[1].cloneNode(true);
tmp = document.createTextNode('Hallo');
row.getElementsByTagName("td")[1].appendChild(tmp);

row = document.getElementById('Table').getElementsByTagName("tr")[1].cloneNode(true);
alert(row.getElementsByTagName("td")[1].getAttribute("align"));
alert(document.getElementById('Table').getElementsByTagName("tr")[1].getElementsByTagName("td")[1].getAttribute("align"));

/mvh
</bole>
Avatar billede olebole Juniormester
12. september 2007 - 20:36 #2
Jeg har altid selv disse wrappers liggende i toppen af script-tagget i min HTML-template:

var d=document;
function gE(id){return d.getElementById(id)};
function gA(o,t){return o.getElementsByTagName(t)};
function cE(t){return d.createElement(t)};
function cT(s){return d.createTextNode(s)};

Med dem ville koderne se sådan ud:

row = gA(gE('Table'), "tr")[1].cloneNode(true);
tmp = cT('Hallo');
gA(row, "td")[1].appendChild(tmp);

row = gA(gE('Table'), "tr")[1].cloneNode(true);
alert(gA(row, "td")[1].getAttribute("align"));
alert(gA(gA(gE('Table'), "tr")[1], "td")[1].getAttribute("align"));

Lidt slankere ... omend den sidste er en anelse 'krøllet'  ;o)
Avatar billede michaelthomassen Nybegynder
12. september 2007 - 21:34 #3
Ole slår til igen med en korrekt løsning. Jeg vil tillade mig straks at tyvstjæle de wrappers, de er sgu meget fixe :)

Nu melder den i det mindste ikke fejl i IE, men min nyoprettede tabel vises ikke... men det er jo nok et helt andet spørgsmål. Kan det have noget at gøre med at jeg sætter style på min tabel således;

tbl.style.display = 'block';

Jeg har prøvet med

tbl.setAttribute('style', 'display:block');

som heller ikke virker, men det er måske forkert?


Tak for hjælpen, smid et svar :)
Avatar billede michaelthomassen Nybegynder
12. september 2007 - 21:41 #4
Har fundet fejlen, IE vil åbenbart have et tbody element i tabellen, ellers bliver rows ikke vist.
Avatar billede olebole Juniormester
14. september 2007 - 14:06 #5
Ja, tbody'en er faktisk obligatorisk i et tabel-element, men browserne sætter det automatisk ind, hvis det undlades. Dog er det ikke nok, når man vil bruge DOM på tabellen ... så _skal_ der være et tbody-element til stede  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester