[JavaScript] prototype aan bepaald type Element

Pagina: 1
Acties:

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Ik vroeg me af of het mogelijk is om een prototype aan een bepaald type Element te plakken. Bijvoorbeeld alleen aan alle SELECT element of alle DIV element.

vb Select.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
// Aan ieder element een functie om de huidige waarde op te vragen, hangen
for (strElementIndex in document.all)
{
    objEl = document.getElementById(strElementIndex);
    if (objEl.tagName == 'SELECT')
    {
        objEl.getSelectedOption = function(strAttr)
        {
             return this.options[this.options.selectedIndex][strAttr];
        }
    }
}

Ik weet dat het een beetje lelijk code is, maar het was even iets wat ik zo 1,2,3 bedacht. Nu zou je dus via
JavaScript:
1
document.getElementById('selectId').getSelectedOption('value')
de waarde van de geselecteerd optie uit kunnen lezen. Dit zelfde idee wil ik graag gebruiken maar nu dmv een prototype:
JavaScript:
1
2
3
4
SELECT.prototype.getSelectedOption = function(strAttr)
{
    return this.options[this.options.selectedIndex][strAttr];
}

Zoiets dus, waarbij in iedere select de waarde op dezelfde manier als hierboven uit te lezen zou moeten zijn. Is dit mogelijk .. ?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Geen idee of het werkt, maar kun je niet het prototype van een bestaand select element opvragen en die aanpassen?

dus

document.getElementById('mySelect').prototype.getSelectedOption = function() {}

Niet echt netjes, er moet immers al een element bestaan en dan lijkt het me eerlijk gezegd stug dat het werkt ;) Elementen zijn een los object op zich volgens mij.

Misschien dat je eerst een dummy element kan maken om aan te passen:

mySelect = document.createElement('SELECT');
mySelect.prototype.getSelectedOption = function() {}

[ Voor 19% gewijzigd door Bosmonster op 06-03-2003 14:24 ]


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 23:23

RM-rf

1 2 3 4 5 7 6 8 9

Gecko-based browsers zouden de optie moeten bieden, MSIE niet:
http://dhtmlkitchen.com/d...html/dom/extendingdom.jsp (en klik op de tab 'Protoype inheritance')

voor msie moet je dus zo'n document.all loop moeten maken, maar doe dat dan wel een beetje schoon en gebruik enkel document.all en niet document.all en document.getElementById door elkaar heen.
nog beter is mogelijk om gewoon getElementsByTagName()-collection te gebruiken

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Bosmonster
JavaScript:
1
document.getElementById('mySelect').prototype.getSelectedOption = function() {}
Dat is toch hetzelfde als gewoon een functie aan ieder afzonderlijk element hangen ?
==
JavaScript:
1
document.getElementById('mySelect').getSelectedOption = function() {}
Zoiets had ik dus al, maar is helaas niet wat ik zoek..
JavaScript:
1
2
mySelect = document.createElement('SELECT');
mySelect.prototype.getSelectedOption = function() {}
Zou evt. kunnen, maar het is alleen wat onhandig, want de elementen worden niet dynamisch aangemaakt, maar bestaan al gewoon in de HTML van de body. Dan zou ik die elementen dus moeten gaan vervangen oid.
RM-rf
Gecko-based browsers zouden de optie moeten bieden, MSIE niet:
http://dhtmlkitchen.com/d...html/dom/extendingdom.jsp (en klik op de tab 'Protoype inheritance')
Ik krijg een #500 (Internal server error ofzo), misschien dat de pagina het zo wel doet..
..nog beter is mogelijk om gewoon getElementsByTagName()-collection te gebruiken
Ja, zoiets had ik zelf ook uitgedacht, hoop(te) alleen dat het op een makkelijker manier kon dmv een prototype standaard aan bepaalde elementen te kunnen koppelen.. :'(

[ Voor 36% gewijzigd door r0bert op 06-03-2003 14:39 ]


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

r0bert schreef op 06 maart 2003 @ 14:35:
[...]

Dat is toch hetzelfde als gewoon een functie aan ieder afzonderlijk element hangen ?


Nee das niet hetzelfde. Je vraagt immers het prototype op van dat element, dus een select-prototype.

Het voorbeeld met createElement zou dus het select-prototype aanpassen, niet dat specifieke element.

Je hebt het prototype-principe nog niet helemaal door geloof ik ;)

[ Voor 22% gewijzigd door Bosmonster op 06-03-2003 14:45 ]


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
:X O-) }:O ohw oeps, xal even proberen.. enneuh, dat begrijpen komt vanzelf wel als ik er wat meer mee klooi :) Van mijn fouten kan ik leren, daarom maak ik 'r denk ik ook zoveel :P

[edit]
Hmm.. ik krijg het niet voor elkaar via prototyping.. ook niet op de manier die jij beschrijft. Maar je maakt een prototype toch vast aan de contructor/functie waardoor het element ontstaan is ? Toch niet aan het object zelf (wat wordt gereturned bij document.getElementById) :?

[ Voor 45% gewijzigd door r0bert op 06-03-2003 14:56 ]


Verwijderd

Dit zou eventueel wel kunnen werken...(voor Moz dan)
code:
1
HTMLSelectElement.prototype.getSelectedOption = function ...bla

Verwijderd

Je zou ook eventueel met behaviors, methodes en properties kunnen hangen aan bepaalde element. IE only.
Pagina: 1