Element.prototype in IE7?

11,565

Solution 1

No. There will be some limited support in IE8, but 'till then you're better off finding another place to hang your functions.

Solution 2

Here is a simple workaround that will be sufficient in 99% of cases. It may as well be completed as required by your script :

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

Solution 3

IE do not have "Element" set, so you can't access the prototype of Element to directly add your function. The workaround is to overload "createElement" and "getElementById" to have them return an element with a modified prototype with your function.

Thanks to Simon Uyttendaele for the solution!

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;
        }
}
Share:
11,565
Adams Biyi
Author by

Adams Biyi

I like cheese and meat. Also, Node.js.

Updated on June 09, 2022

Comments

  • Adams Biyi
    Adams Biyi almost 2 years

    I'm trying to extend all dom elements so i can get and remove their children. The function is below (works in FF and Chrome). Is there an equivalent in IE7 to extend the base dom object?

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

    Thanks!

  • Brett Caswell
    Brett Caswell almost 11 years
    removed my answer and edited this one, I didn't have enough rep to do it before