Toon posts:

[JS] "Element" is undefined

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dacht ik een aantal handige functies te hebben, blijken ze alleen in FF te werken. IE geeft een "Element is undefined" error. Maar dat snap ik niet, want Element is toch gewoon een gereserveerd object?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Element.prototype.hasClass = function(className) {
  return ( 
    this.className && 
    this.className.match(new RegExp("\\b" + className + "\\b")) 
  ) ? true : false;
}

Element.prototype.addClass = function(className) {
  if (!this.hasClass(className)) {
    if (this.className && this.className.length > 0) {
      className = this.className + " " + className;
    }
    this.className = className;
  }
}

Element.prototype.removeClass = function(className) {
  if (this.hasClass(className)) {
    this.className = this.className.replace ( 
      new RegExp("\\b" + className + "\\b"), "" 
    );
  }
}


Wie kan mij uitleggen waarom IE deze meldig geeft? Moet ik "Element" eerst nog definieren?!

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
In IE kun je Element e.d. afaik helemaal niet prototypen...

[ Voor 12% gewijzigd door user109731 op 01-05-2008 21:04 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:40

crisp

Devver

Pixelated

IE heeft zelfs helemaal geen native Element object

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
JanDM schreef op donderdag 01 mei 2008 @ 21:03:
In IE kun je Element e.d. afaik helemaal niet prototypen...
crisp schreef op donderdag 01 mei 2008 @ 21:40:
IE heeft zelfs helemaal geen native Element object
Wat vervelend dat ik daar nu pas achter kom (had ik maar niet alleen in FF moeten kijken tijdens ontwikkelen). Ik vond constructies als deze:
JavaScript:
1
2
3
if (fieldset.hasClass('collapsible')) {
  // do stuff...
}

Erg lekker werken. Als ik hasClass() nar een generieke functie ombouw, krijg ik ws. iets als
JavaScript:
1
2
3
if (hasClass('collapsible', fieldset)) {
  // do stuff...
}

Of is er een workaround zodat ik mijn huidige functies kan blijven gebruiken?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:40

crisp

Devver

Pixelated

Verwijderd schreef op donderdag 01 mei 2008 @ 21:55:
[...]


[...]

Wat vervelend dat ik daar nu pas achter kom (had ik maar niet alleen in FF moeten kijken tijdens ontwikkelen). Ik vond constructies als deze:
JavaScript:
1
2
3
if (fieldset.hasClass('collapsible')) {
  // do stuff...
}

Erg lekker werken.
True, maar IE is nu eenmaal een beetje een achterlijke browser - ik dacht dat dat toch wel common knowledge was...
Als ik hasClass() nar een generieke functie ombouw, krijg ik ws. iets als
JavaScript:
1
2
3
if (hasClass('collapsible', fieldset)) {
  // do stuff...
}

Of is er een workaround zodat ik mijn huidige functies kan blijven gebruiken?
Sommige libraries zoals prototype extenden HTML-elementen die mbv $() en consorten worden benaderd zodat je wel dit soort dingen kan doen:
JavaScript:
1
if ($('foo').hasClass('bar')) { }

vanuit performance oogpunt is een functiecall echter goedkoper...

Intentionally left blank