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