Avatar billede chrisbuchholz Nybegynder
22. februar 2009 - 10:27 Der er 6 kommentarer

Hvad hedder den indbyggede klasse?

Hej,

jeg er på udkig efter navnet på den klasse der bruges når man f.eks. har reference til et element i en streng. Hvad hedder den klasse? Jeg har kigget på både Object og String klasserne, men det ser ikke ud til at være nogen af disse.
Det jeg vil er følgende:

var oElm = document.getElementById('oelm');
oElm.addEvent( %trigger%, %delegatereturn%, %bubling% );

og jeg har dertil laves en crossbrowser metode for at tilføje events til et sådant element. Nu skal den så bare smides på den klasse som oElm er, men hvad hedder denne?
Avatar billede olebole Juniormester
22. februar 2009 - 16:20 #1
<ole>

Det er ikke som sådan en tigængelig klasse (selvom der er visse forskelle mellem browserne). DOM er opbygget sådan, at du tildeler egenskaber til hvert enkel node/element

/mvh
</bole>
Avatar billede olebole Juniormester
22. februar 2009 - 17:03 #2
Du kan gøre noget à la:

var oElm = document.getElementById('oelm');
addEvent( oElm, %trigger%, %delegatereturn%, %bubling% );

- eller du kan lave en OO-wrapper til elementerne og så extende denne klasse med metoden. I f.eks. Firefox og Opera kan du godt nok extende prototypen på 'HTMLElement', men den går ikke i IE:

<script type="text/javascript">
HTMLElement.prototype.bla = function(){
    return this.getAttribute("id");
}
</script>

<div id="fooBar" onclick="alert(this.bla())">Klik på dette div</div>
Avatar billede chrisbuchholz Nybegynder
22. februar 2009 - 17:48 #3
Yeah, ole, mit draft var at extende (prototype) på Object klassen, men den var som sagt ikke den rigtige klasse, men det er HTMLElement klassen jeg skal have fat i så?

Det er lidt træls IE ikke vil spille med, da det er en pænere måde end at lave en wrapper til den slags funktioner. Nu må vi se hvad jeg kommer frem til.
Avatar billede olebole Juniormester
22. februar 2009 - 18:22 #4
Nu er det ikke altid IE, der ikke vil 'spille med' - selvom det er vældig trendy at mene sådan. Her er det faktisk MS, der holder fast i den måde, de fleste andre sprog behandler GUI-kontroller på. Nej, jeg synes ikke, det er en pænere måde.

Og så står der jo ingen steder, man skal kunne extende HTMLElement. Det er en ganske ustandardiseret opførsel  ;o)
Avatar billede chrisbuchholz Nybegynder
22. februar 2009 - 20:02 #5
Ah, men det er stadigvæk Microsoft der skaber problemet, og faktisk så kan jeg heller ikke få det til at virke med HTMLElement klassen i hverken firefox eller opera samt epiphany.
Avatar billede olebole Juniormester
22. februar 2009 - 20:27 #6
Jeg og min nabo farver helt umotiveret håret grønt og skægget orange. Er du så pludselig problemet, fordi du ikke vil skabe dig åndsvagt og gøre det samme?  =)

Det er svært at se, at Microsoft skulle være problemet, fordi de ikke følger andre fabrikanters proprietære påhit. Det er ikke let at skulle please et marked, der går fra 0 til 180 grader.
    They're damned if they do - and damned if they dont!

Det her funker fint i Firefox og Opera:

<script type="text/javascript">
HTMLElement.prototype.addEvent = function(sType, fn){
    if (this.addEventListener) this.addEventListener(sType, fn, false);
    else if (this.attachEvent) this.attachEvent("on"+sType, fn);
    else if (typeof this["on"+sType]=="function") {
        var tmp = this["on"+sType];
        this["on"+sType] = function(){tmp();fn()};
    }
    else this["on"+sType] = fn;
}

function foo() {
    alert("Du klikkede på: " + this.getAttribute("id"))
}

window.onload = function() {
    document.getElementById("fooBar").addEvent("click", foo)
}
</script>

<div id="fooBar">Klik på dette div</div>
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