a.type="checkbox" er 'den gamle' (JS)syntaks fra før W3C's standardiserede HTML-DOM, som introducerede set/getAttribute-metoderne. Under HTML er den gamle syntaks stadig lovlig, men da XHTML er et subset af XML, kan den ikke bruges (hvis der altså er tale om XHTML, der faktisk parses som sådan). Her er man tvunget til at anvende XML-DOM, som også indeholder de to metoder set/getAttribute.
'style' er ikke at regne for en attribut - men et objekt på elementet. Derfor kan du ikke bruge set/getAttribute på den 'attribut' :)
Heller ikke event-handlers kan manipuleres via de to metoder. Her burde man bruge metoden addEventListener - men den understøttes endnu ikke af IE, der kræver, man bruger attachEvent.
MS er igang med en total (og fra bunden) omskrivning af IE, hvorved den burde blive langt mere kompatibel med W#C's standarder .... så mangler vi blot FF's DOM-lag kommer på højde med dens forgængeres Netscape og Mozilla 1.5 i stedet for den katastrofe, vi belemres med idag ;o)
mclemens >> Ja, en sådan funktion/metode er en udmærket ting - men man bør nu passe på med expando-properties på dokument-objektet. Læg den i stedet på window-objektet, hvilket performer bedre ;o)
Mht Xhtml så klapper vi lige muldyret her i det mørke Jylland, og holder os til HTML 4.01.
Ingen tvivl om at setAttribute(NS) er en del af eksisterende standard og kommende browsere. Hvad kan ikke bruge setAttribute i dag? Jeg regner ikke med at understøtte "generiskbrowser" version 4.x.
Og ja, Ole, jeg har hørt efter i timerne. style bruges som property ikke attribut, sådan vil det altid være.
onclick og name har jeg også brugt uden setAttribute, og det eneste positive er at det virker. Og det gør det vel også et stykke tid endnu.
En ny IE løser ingen problemer, men giver blot en ekstra browser.
( Takker for input og links Ole, kigger på dem iaften :o) ) Enig med det om at innerHTML og document.write() er bandlyst ... (((innerHTML bruger jeg kun selv til quick test idag)))
Jeg kan vist ikke smide et link til koden her, men Ole, hvis du har tid kan du tjene til en flaske F....... hvis du vil kigge et par siders JavaScript igennem og komme med indspark - send lige en mail til adressen i mit minisite, for tiden erikj567 hos hotmail punktum com. Men lad os "løse" problemet om setAttribute her, forstås.
Problemet er, at selv om det er afsindigt sjovt at lave dynamiske indtastningsformularer, og jeg endda får løn får det, så er det jo mig der hænger på det, når de kommer rendende om nogle år, og siger at det ikke længere virker.
Ja, en hel browser i 265 kByte er nok stadig en utopi. Men det er jo netop problemet med IE. Jeg havde fundet ud af at dynamiske checkboxe mister deres afkrydning, hvis man flytter dem rundt i DOM-træet, hvad jeg skal kunne, men det er et nemt hack: aflæs checked inden flytning, sæt den bagefter. Men dynamisk genererede radioknapper kan man slet ikke få markeret når man klikker i dem - ikke uden et hack med onclick (som jeg skal have til at virke i dag).
Kunden: "Og så skal den virke i IE". Konsulent: "Naturligvis. Vi skal lige gange prisen med 2".
Erik >> I IE kan du først check'e en checkbox, når den er append'ed til et element i træet:
function bla() { var o = document.createElement("input"); o.setAttribute("type", "checkbox"); document.body.appendChild(o); o.setAttribute("checked", "checked"); }
Det er en del af eventyret, Ole. Når jeg flytter rundt på den igen, skal det ske een gang til, udpluk: var c=a['chkbx'].checked; tbody1.insertBefore(row,row.previousSibling); a['chkbx'].checked=c; // IE specifikt
Hmmm ... ikke engang, når man i IE bruger ELEMENT.cloneNode(true) på en checked checkbox, overføres værdien af checked-attributten :o(
Sådan er det åbenbart i IE ... til gengæld kan man ikke (som i FF) indsætte, hvad somhelst - hvor somhelst. Summen af elendigheder er vist konstant, når det gælder browsere ;o)
Det er bare rent til grin i IE. Når jeg så dynamisk har oprettet en række radioknapper, med samme navn, forskellig værdi, og får sat en prik med lidt hjælp fra en stump javascript, så fjerner IE ikke afkrydsningen i de andre radioknapper med samme navn. Det er der trods alt andre browsere der kan finde ud af.
Og så skal vi snart have lukket den her. En sidste ting - en vurdering af forskelle i anvendelighed af følgende (hvad kan bruges i dag og i fremtiden?)
Ang. problemet med radios i IE, kunne det skyldes, du ikke får sat name-attributten (det kan IE nemlig ikke på input-elementer). Prøv evt. alert'e innerHTML'en af parentNode til elementet og se, om name-attributten er sat.
Nah, Ole kaster et svar - jeg skrev kun at jeg tror du skal bruge setAttribute ... en kommentar fra en person der tror noget kan jeg ikke selv bruge - det er bedre med en der ved det ligesom Ole ;)
Den eneste ting der er træls er selvfølgelig at det kan være nødvendigt at bruge .value istedet for getAttribute("value") afhængig af ens system ... ((( hvis man f.eks. har behov for input validering via. FF som i - http://www.eksperten.dk/spm/731497#rid6423160 )))
Det er så i orden, mclemens. Heldigvis skal denne del af systemet afvikles på færrest maskiner, af færrest mennesker, af færrest browsere. Så det er noteret at 1) Det skal aftestes i relevante kombinationer af OS-er og browsere 2) Det skal noteres, at det kræver en løbende vedligeholdelse. Øv osse.
- og faktisk har jeg 'forsket' lidt mere i sagen vedr. value-attributten ... og bl.a. dykket dybt i W3C's mailtråde =)
Det viser sig, at der idag ikke findes en valid DOM-metode til at ekstrahere en dynamisk 'property' fra en node (som f.eks. value) ... og det er som sådan ikke en fejl. Problemet er, at XHTML endnu ikke er færdig - men når vi overgår til XHTML2.0 og bl.a. XForms, vil det blive muligt at scripte validt mod XHTML-DOM'en. Indtil da må man skrive invalid XHTML - eller HTML4.01-Strict ;o)
- og hvis han ønsker sig del i dem, opretter jeg gerne et spørgsmål ;o)
Tak for nødder, Erik =)
Synes godt om
Ny brugerNybegynder
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.