gruss Jeena,
... Mein Ansatz ist ja falsch, weil "this" beim
definieren natürlich auf [Window Object] zeigt.
... mitnichten ...
Object.prototype.hasClass = function (className) {
if(!this.className) return false;
return (this.className.search('(^|\s)' + className + '(\s|$)') != -1);
}
... den [this]-kontext betreffend ist Dein ansatz goldrichtig. ich wette,
dass Dein code, so wie Du Ihn hier gepostet hast, auch auf jeder gecko-
engine laeuft - vielleicht sogar im opera.
hast Du denn den code nicht auf zumindest einen browser losgelassen?
ich wuerde die erweiterung aber nicht an den prototypen von [Object]
nageln, denn dadurch kaeme wirklich jedes JavaScript-objekt, gewollt
oder nicht, in den genuss Deiner methode [hasClass].
ausserdem ist vor diesem hintergrund der methodenname missverstaendlich.
Du willst jedem knoten oder besser jedem element im dokumentenbaum eine
methode "hasClassName" oder "containsClassNames" mitgeben.
letztgesagtes direkt in JavaScript-code uebersetzt saehe dann so aus:
~~~javascript
Node.prototype.containsClassNames = function () {/* bzw.
HTMLElement.prototype.has...
[this] bezieht sich tatsaechlich auf alles,
was [Node]/[HTMLElement] ist oder auf alles,
was wie auch immer ueber den prototypen von
[Node]/[HTMLElement] geerbt hat.*/ /*
... Dein code ...*/
};
leider aber scheitert der von Dir gewaehlte loseungsansatz trotz seiner
eleganz brutal an der praxis. die ueberwiegende mehrzahl der aktuellen
browser-arten implementiert seine DOM-objekte NICHT als native JavaScript-
objekte. die hersteller sind dazu auch nicht verpflichtet. ECMAScript 261
beschreibt nur den JavaScript-sprachkern. DOM ist eine andere baustelle,
und BOM traegt ein schweres erbe.
wolltest Du nur spielen oder kann Deinem problem browseruebergreifend
anderweitig abhilfe geschafft werden?
by(t)e by(t)e - peterS. - pseliger@gmx.net
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]