2009-02-28 6 views
6

Ich versuche alle dom Elemente zu erweitern, damit ich ihre Kinder bekommen und entfernen kann. Die Funktion ist unten (funktioniert in FF und Chrome). Gibt es ein Äquivalent in IE7, um das Basisdomobjekt zu erweitern?Element.prototype in IE7?

if (!Element.get) { 
Element.prototype.get = function(id) { 
    for (var i = 0; i < this.childNodes.length; i++) { 
     if (this.childNodes[i].id == id) { 
      return this.childNodes[i]; 
     } 
     if (this.childNodes[i].childNodes.length) { 
      var ret = this.childNodes[i].get(id); 
      if (ret != null) { 
       return ret; 
      } 
     } 
    } 
    return null; 
} 
} 

Element.prototype.removeChildren = function() { 
    removeChildren(this); 
} 

Vielen Dank!

+0

Betrogene http://stackoverflow.com/questions/592815/is-there-really-no-way-to-expose-the-prototype-of-a-html-element-in-ie-8/ – bobince

Antwort

4

Nein. Es wird eine begrenzte Unterstützung geben in IE8, aber bis dahin sind Sie besser dran, einen anderen Ort zu finden, um Ihre Funktionen aufzuhängen.

6

Hier ist eine einfache Problemumgehung, die in 99% der Fälle ausreichen wird. Es kann auch abgeschlossen werden, wie von Ihrem Skript erforderlich:

if (!window.Element) 
{ 
    Element = function(){}; 

    var __createElement = document.createElement; 
    document.createElement = function(tagName) 
    { 
     var element = __createElement(tagName); 
     if (element == null) {return null;} 
     for(var key in Element.prototype) 
       element[key] = Element.prototype[key]; 
     return element; 
    } 

    var __getElementById = document.getElementById; 
    document.getElementById = function(id) 
    { 
     var element = __getElementById(id); 
     if (element == null) {return null;} 
     for(var key in Element.prototype) 
       element[key] = Element.prototype[key]; 
     return element; 
    } 
} 
+0

löste meine Antwort und editierte diese, ich hatte nicht genug Rep, um es vorher zu tun –

3

IE haben keine „Element“ gesetzt, so kann man nicht den Prototyp Element zugreifen, um direkt Ihre Funktion hinzuzufügen. Die Problemumgehung besteht darin, "createElement" und "getElementById" zu überladen, damit sie ein Element mit einem modifizierten Prototyp mit Ihrer Funktion zurückgeben.

Danke an Simon Uyttendaele für die Lösung!

if (!window.Element) 
{ 
     Element = function(){} 

     Element.prototype.yourFunction = function() { 
       alert("yourFunction"); 
     } 


     var __createElement = document.createElement; 
     document.createElement = function(tagName) 
     { 
       var element = __createElement(tagName); 
       for(var key in Element.prototype) 
         element[key] = Element.prototype[key]; 
       return element; 
     } 

     var __getElementById = document.getElementById 
     document.getElementById = function(id) 
     { 
       var element = __getElementById(id); 
       for(var key in Element.prototype) 
         element[key] = Element.prototype[key]; 
       return element; 
     } 
}