Element.prototype в IE7? - PullRequest
       12

Element.prototype в IE7?

7 голосов
/ 28 февраля 2009

Я пытаюсь расширить все элементы 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);
}

Спасибо! * * 1004

Ответы [ 3 ]

6 голосов
/ 08 ноября 2009

Вот простой обходной путь, который будет достаточен в 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;
    }
}
4 голосов
/ 28 февраля 2009

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

3 голосов
/ 14 июля 2011

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

Спасибо Саймону Уайттанделе за решение!

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;
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...