JavaScript getElementById函数重载

Joh*_*y_D 0 javascript overloading

我的旧网站有问题.它上面的所有JavaScript代码都使用getElemenById函数.但是站点标记的标签没有id属性,而是只有name属性.虽然它仍适用于IE,但浏览器甚至通过name属性返回元素.对于所有其他浏览器,它在JS中是一个错误.我想知道是否有任何方法可以在其他浏览器中重载此功能,使网站与其他浏览器兼容?

aro*_*oth 12

在你用Java或C这样的强类型语言这样做的意义上,没有办法在JavaScript中"重载"一个函数.实际上,JavaScript中的每个函数在这个意义上都已经过载,因为你可以调用任何函数任何数量和类型的参数.

但是,您可以做的是在现有版本之前插入您自己的代理,并使用您喜欢的任何行为实现代理.例如:

document._oldGetElementById = document.getElementById;
document.getElementById = function(elemIdOrName) {
    var result = document._oldGetElementById(elemIdOrName);
    if (! result) {
        var elems = document.getElementsByName(elemIdOrName); 
        if (elems && elems.length > 0) {
            result = elems[0];
        }
    }

    return result;
};
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 +1 (2认同)