欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【jQuery 1.7.2中getAll方法的疑惑分析】,下面是详细的讲解!
jQuery 1.7.2中getAll方法的疑惑分析
getAll方法是私有的,在manipulation模块中。代码只有简单的几行,如下
function getAll( elem ) {
if ( typeof elem.getElementsByTagName !=="undefined" ) {
return elem.getElementsByTagName( "*" );
} else if ( typeof elem.querySelectorAll !=="undefined" ) {
return elem.querySelectorAll( "*" );
} else {
return [];
}
}
从函数名可知该方法用来获取传入HTML元素的所有子元素。内部就三个分支
1,先判断elem是否有getElementsByTagName方法,如有使用getElementsByTagName方法获取所有子元素后返回。
2,不支持getElementsByTagName接着判断elem是否支持querySelectorAll方法,如支持使用querySelectorAll方法获取元素子元素后返回。
3,getElementsByTagName和querySelectorAll都不支持,返回空数组。
当时看这段代码时有的疑惑,感觉第二个分支有点多余。
1,getElementsByTagName 是DOM Level 2 中的API(较早),目前的所有浏览器应该都已经支持,既然都支持了,那么就不会进入第二个分支而直接返回了。后面代码岂不是都是多余了。
2,querySelectorAll 是DOM Level 3 中的API(较新),IE6/7不支持。
看到这里大家是不是也觉得后面两个分支是多余的呢? 或者说能找出不多余的理由吗? 即只要找出符合以下条件的元素elem。
“elem没有getElementsByTagName方法,但有querySelectorAll方法”
经过多方寻求,讨论终于找到了答案(小牛同学发现的)。DocumentFragment满足该条件。
var frag=document.createDocumentFragment();
alert('getElementsByTagName' in frag);
alert('querySelectorAll' in frag);
以上代码在IE9/Chrome/Safari/Firefox/Opera中先后弹出了false,true。
到此,不解释了。
注:DocumentFragment对象的几个特殊点
1,IE6/7/8中具有createElement方法,其它浏览器(IE9/10/Safari/Chrome/Firefox/Opera)没有
2,IE9/10/Firefox/Safari/Chrome/Opera中没有getElementsByTagName方法,但有querySelectorAll方法。
相关:
http://www.jb51.net/article/30352.htm
https://developer.mozilla.org/en/DOM/document.createDocumentFragment
https://developer.mozilla.org/En/DOM/DocumentFragment
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-B63ED1A3
关于jQuery 1.7.2中getAll方法的疑惑分析的用户互动如下:
相关问题:【急】jquery-1.7.1.min.js 实现轮播效果 和 jquer...
答:两个版本同为jQuery库,仅以你用高版本的,如果轮播效果没有起作用,那就是,存在自定义方法,仔细找找该方法放进1.7.2中再看效果! >>详细
相关问题:我用jquery-1.7.1.min写的特效,换成jquery-1.10.2....
答:你好: JQuery 在1.9版本就已经开始围绕API清理,删除了之前版本中不建议使用的一些功能,这些变化可能会影响现有代码。 具体可以查看官方文档查看API的变化: http://blog.jquery.com/2012/12/17/jquery-1-9-beta-1-released/ 如果不想做出改动... >>详细
相关问题:关于jquery方法执行顺序的疑惑。(或许跟同步异步...
答:亲~AJAX是异步传输的啊~ >>详细
- 【Array】js中更短的 Array 类型转换-类型转换
- 【ExtJs】ExtJs 表单提交登陆实现代码-表单提交-
- 【Ajax】jQuery 学习第六课 实现一个Ajax的TreeVi
- 【extjs】extjs每个组件要设置唯一的ID否则会出错
- 【focus】JavaScript使用focus()设置焦点失败的解
- 【bootstrap3】基于bootstrap3和jquery的分页插件
- 【datagrid】jQuery easyui datagrid动态查询数据
- 【ajax】js获取通过ajax返回的map型的JSONArray的
- 【hover】jQuery控制图片的hover效果(smartRollo
- 【ajax更新数据库】ajax异步刷新实现更新数据库-
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
