通过各种浏览器在document.getelementbyid等方法实施的差异分析

所有的Web前端的同事们document.getelementbyid.in发展过程非常熟悉,你经常需要使用它来获取网页的ID为XX元。由于旧JS库原型很流行,所以它喜欢简单地编写它。
复制代码代码如下所示:
1
函数$(ID){ return document.getelementbyid(ID);}

有没有人想过如何写它,而不是用下面的方式写它
复制代码代码如下所示:
2
var $ = document.getelementbyid;

这是一个更紧凑的美元,很明显,文件的方法包括分配给变量$,和页面ID元素为XX获得美元。事实上,模式2在IE6 / 7 / 8是可行的(有些在IE9的变化),和Firefox / / /歌剧Safari Chrome是不可行的。另外,请自行测试。

为什么火狐/ Chrome / Opera模式不能获得2原因是,在这些浏览器包括内部的实现取决于此(文档),而不需要这个。或2路就是当它在Firefox或Safari和Chrome /歌剧,这是失去了,以下是一个简单的例子
复制代码代码如下所示:
定义函数显示
函数显示(){警报(这个名称);}

定义具有名称属性的p对象
VaR P = {姓名:杰克};

show.call(P); / / ->杰克
(显示)
show.call(空); / / - >

可以看出,实现的实现依赖于此(简单地说,这是在方法体中使用的),因此如果调用环境(执行上下文),如果没有name属性,它将不能得到预期的结果。
换句话说,IE6 / 7 / 8不使用的时候document.getelementbyid实施,而IE9 / / / Firefox Safari Chrome /歌剧需要这个,这是文档对象。内部这是窗口对象的时候直接调用方式是2,所以2路呢通常不会获得元根据ID在Firefox和Safari /铬/歌剧。

如果document.getelementbyid执行环境改变文档窗口,您可以使用如下美元。
复制代码代码如下所示:
修复/ document.getelementbyid
document.getelementbyid =(功能(Fn){)
返回函数(){
返回fn.apply(文件、参数);
};
})(文件。getElementById);

作业后修复到$,$可以正常使用。
var $ = document.getelementbyid;

再次,在ecmascript5功能新绑定的方法可以达到同样的效果
复制代码代码如下所示:
3
var $ = document.getelementbyid.bind(文档);

但目前3的IE9 / / /火狐Chrome仅支持。

这包括形势分析,对差异原因的各种浏览器下面的方法是很好的理解
复制代码代码如下所示:
无功prinf =段;
Prinf(测试prinf '); / / / / 8 IE6 7可以运行,其他浏览器错误

无功prinfln = document.writeln;
Prinfln(测试prinfln '); / / / / 8 IE6 7可以运行,其他浏览器错误

VaR重装= location.reload;
重装(IE6 / 7 / 8); / /运行,其他浏览器错误

VaR去= history.go;
去(2); / / / / 8 IE6 7可以运行,其他浏览器错误