2009-02-28 1 views
6

Я пытаюсь расширить все элементы dom, чтобы я мог доставать и удалять своих детей. Функция ниже (работает в FF и Chrome). Есть ли в IE7 эквивалент для расширения базового объекта dom?Элемент.прототип в 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); 
} 

Спасибо!

+0

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

ответ

4

Нет. Будет ограниченная поддержка in IE8, но «до тех пор вам лучше найти другое место, чтобы повесить ваши функции.

6

Вот простой способ обхода, который будет достаточным в 99% случаев. Это может также быть завершено в соответствии с требованиями вашего сценарием:

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

удалил мой ответ и отредактировал этот, мне не хватило репутации, чтобы сделать это раньше –

3

IE не имеет набора «Element», так что вы не можете получить доступ прототипа элемента непосредственно добавить вашу функцию. Обходным путем является перегрузка «createElement» и «getElementById», чтобы они возвращали элемент с модифицированным прототипом с вашей функцией.

Благодаря Simon Uyttendaele для решения!

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; 
     } 
}