没有合适的资源?快使用搜索试试~ 我知道了~
各浏览器对document.getElementById等方法的实现差异解析
1 下载量 43 浏览量
2020-09-04
20:25:43
上传
评论
收藏 49KB PDF 举报
温馨提示
试读
2页
主要是对各浏览器对document.getElementById等方法的实现差异进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
资源推荐
资源详情
资源评论
各浏览器对各浏览器对document.getElementById等方法的实现差异解等方法的实现差异解
析析
主要是对各浏览器对document.getElementById等方法的实现差异进行了详细的分析介绍,需要的朋友可以过来
参考下,希望对大家有所帮助
所有Web前端同仁对 document.getElementById 都非常熟悉了。开发过程中经常需要用其获取页面id为xx的元素,自从元老
级JS库Prototype流行后,都喜欢这么简写它
复制代码 代码如下:
// 方式1
function $(id){ return document.getElementById(id); }
有没有人想过为什么要这么写,而不用下面的方式写呢?
复制代码 代码如下:
// 方式2
var $ = document.getElementById;
这么写的$更简洁啊,也很明了,将document的方法getElementById赋值给变量$,用$去获取页面id为xx的元素。实际上方式
2在IE6/7/8中是可行的(IE9中有些变动),Firefox/Safari/Chrome/Opera则行不通。还请自行测试。
为什么Firefox/Safari/Chrome/Opera 方式2获取就不行呢,原因是这些浏览器中getElementById方法内部实现中需依赖
this(document),IE则不需要this。或者说方式2在Firefox/Safari/Chrome/Opera中调用时说丢失了this,以下是个简单示例
复制代码 代码如下:
// 定义一个函数show
function show(){alert(this.name);}
// 定义一个p对象,有name属性
var p = {name:'Jack'};
show.call(p); // -> 'Jack'
show(); // -> ''
show.call(null); // -> ''<BR>
可以看到show的实现中依赖this(简单说方法体中使用了this),因此调用时的环境(执行上下文)如果没有name属性,则得
不到期望的结果。
换句话说,IE6/7/8实现document.getElementById时没有用到this,而 IE9/Firefox/Safari/Chrome/Opera 需要用到this,这里
的this正是document对象。直接调用方式2时内部的 this却是window对象,所以造成方式2在 Firefox/Safari/Chrome/Opera 不
能根据id来正常获取元素。
如果将document.getElementById的 执行环境换成了document而非window,则可以正常的使用$了。如下
复制代码 代码如下:
// 修复document.getElementById
document.getElementById = (function(fn){
return function(){
return fn.apply(document,arguments);
};
})(document.getElementById);
// 修复后赋值给$,$可正常使用了
var $ = document.getElementById;
再次,ECMAScript5 中为function新增的 bind 方法可以实现同样的效果
复制代码 代码如下:
// 方式3
var $ = document.getElementById.bind(document);
但目前方式3只有IE9/Firefox/Chrome/支持。
分析了getElementById的情况,下面的一些方法在各浏览器中的差异原因就很好明白了
资源评论
weixin_38655011
- 粉丝: 9
- 资源: 917
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功