JavaScript getElementById函数重载

时间:2011-07-28 07:32:50

标签: javascript overloading

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

3 个答案:

答案 0 :(得分:12)

在Java中使用强类型语言(例如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;
};

答案 1 :(得分:1)

我不会指望覆盖getElementById正常工作。听起来很容易进行搜索并替换像这样的事情:

// Replace
document.getElementById("foo");
// With
myGetElementById("foo", document);

// Replace
myElement.getElementById("foo");
// With
myGetElementById("foo", myElement);

然后您可以根据需要myGetElementById,而不必担心旧IE中会发生什么,以及如果覆盖getElementById则不会。

答案 2 :(得分:1)

尝试getElementsByName。这用于获取与其名称相关的元素集合