molily: Nodeeigenschaft überschreiben

Beitrag lesen

Hallo,

also ich habe hier [1] eine Variante gesehen und hab versucht dies irgendwie auf node anzuwenden, bin aber gescheitert. Vielleicht geht es aber doch und ich stell mich einfach nur zu blöd an?

[1] http://forum.de.selfhtml.org/archiv/2005/2/t100600/

Da bist du auf dem falschen Dampfer, da gehts nirgends um die prototypische Erweiterung.

Wie Daniel schreibt, kannst du im Opera und Firefox/Gecko folgendes machen, um allen Elementen über eine zentrale Zuweisung eine eigene Funktion zu verpassen:

if (window.HTMLElement && HTMLElement.prototype) {  
   HTMLElement.prototype.getNextElement = function () {  
      var el = this.nextSibling;  
      while (el.nodeType != 1)  
         el = el.nextSibling;  
      return el;  
   };  
}

IE kann das aber nicht. Deshalb geht man üblicherweise anders vor. Man erweitert nicht wirklich alle bestehenden Elemente, sondern die, die man benutzt. Immer wenn man ein Element zur Benutzung anspricht, kopiert man alle eigenen Funktionen in das Elementobjekt. So arbeiten Frameworks wie Prototype und jQuery. Vom Konzept:

var myFunctions = {  
   augmented : true,  
   getNextElement : function () {  
      var el = this.nextSibling;  
      while (el.nodeType != 1)  
         el = el.nextSibling;  
      return el;  
   }  
};  
function $ (id) {  
   var elem = document.getElementById(id);  
   if (!elem.augmented) {  
      // Kopiere eigene Funktionen und hänge sie ans Elementobjekt  
      for (var key in myFunctions) {  
         elem[key] = myFunctions[key];  
      }  
   }  
   // Gebe das Element zurück  
   return elem;  
}  
alert($('id').getNextElement());

Die Funktion »$« kann in größeren Frameworks natürlich mehr annehmen als nur IDs als Strings.

Eigenschaften (also sodass alert(element.nextElement) möglich wäre) sind so schwieriger abzubilden, weil nur wenige Browser Getter und Setter unterstützen (siehe Daniel), daher muss man das Verhalten von Eigenschaften durch die Funktionen getEigenschaft und setEigenschaft ersetzen.

Mathias