查找页面中所有类为test的结点的方法


Posted in Javascript onMarch 28, 2014

前言

阿里巴巴,web前端实习生要在线考试了。确实对于菜鸟的我还是恶补一下知识先。所以百度谷歌了之前阿里巴巴校招的前端笔试题,觉得自己真的被鄙视了,完全做不懂的。啊里巴巴的web前端是在线的笔试,是不是给我们百度谷歌的机会呢?

看见这道题目的时候,觉得确实自己应该去封装一些你常用的方法,就像jquery那样。做出一些方法,是实现浏览器兼容的,或者是工具类,确实对以后开发还是有利的。

HTML

为了方便说明,我们先写下HTML

<p class="A B">find me</p> 
<div class="A">also find me</div>

css我们就省略了,我们的重点有不是css样式是怎么写,我们要的是用javascript通过样式名去寻找结点集合。

实现的方法

1 getElementsByClassName

console.log(document.getElementsByClassName("A")); 
console.log(document.getElementsByClassName("A B"));

出现的结果(firefox 27.0)

查找页面中所有类为test的结点的方法 

确实这个方法,我觉得应该就能解决上面的问题了,但是看了它的兼容性,我觉得应该还是另找方法吧。

查找页面中所有类为test的结点的方法 

2 querySelectorAll

console.log(document.querySelectorAll (".A")); 
console.log(document.querySelectorAll (".B,.A"));

我们来看看结果是什么?跟上面有什么区别?

查找页面中所有类为test的结点的方法 

第二个的结果不一样,原来querySelectorAll参数,如果有两个的话,要用逗号分隔,其实它表示的意思是有A样式或者B样式的结点都可以匹配。

其实这个方法的兼容性也不是很好

查找页面中所有类为test的结点的方法 

基于上面兼容性的问题(毕竟在中国浏览器ie6/7/8还是占多数的嘛) ,我还不如自己做一个方法去实现呢。

3 queryNodesByClass

我觉得应该先说下我的思路

(1) 先获取整个页面每个节点
(2) 遍历每个节点,获取它的className字符串
(3)操作className字符串,先以空格来分割成数组,再用一个对象,设置其key为每个数组元素,那么对应的value为true
(4)现在的问题就是根据你传入的参数(比如一个参数就是"selector",两个的话就是"selector_1 selector_2",以此类推),然后将它也转变成数组,每个数组元素做为之前我们结点className字符串对应的对象的key值,如果匹配的话,就是true,没有的话就是undefined。

那现在我们给出我们的代码

function StringToObj(string){ 
var arr = string.split(" ").sort(); 
var result = {}; 
for(var i=arr.length-1;arr[i];i--){ 
result[arr[i]] = true; 
} 
return result; 
}

function StringToArray(string){ 
var arr = string.split(" ").sort(); 
var result = []; 
for(var i=arr.length-1;arr[i];i--){ 
result.push(arr[i]); 
} 
return result; 
}

function queryNodesByClass(classname){ 
//思路(1) 
var all = document.getElementsByTagName("*"),len = all.length,result = []; 
var cname = StringToArray(classname);//思路(4) 
for(var i=0;i<len;i++){//遍历每个节点 对应思路(2) 
//对应的是思路(3)也就是StringToObj方法起的作用 
var dom_cname = StringToObj(all[i].className),cname_len = cname.length; 
for(var j=0;j<cname_len;j++){ 
if(!dom_cname[cname[j]]) 
break; 
} 
if(j == cname_len) 
{ 
result.push(all[i]); 
}} 
return result; 
}
Javascript 相关文章推荐
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
javascript学习笔记之函数定义
Jun 25 Javascript
js中 javascript:void(0) 用法详解
Aug 11 Javascript
JavaScript深度复制(deep clone)的实现方法
Feb 19 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
Apr 01 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
vue微信分享插件使用方法详解
Feb 18 Javascript
JavaScript实现留言板案例
Mar 17 Javascript
js 验证身份证信息有效性
Mar 28 #Javascript
JS中怎样判断undefined(比较不错的方法)
Mar 27 #Javascript
调用jQuery滑出效果时闪烁的解决方法
Mar 27 #Javascript
jquery选择符快速提取web表单数据示例
Mar 27 #Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 #Javascript
javascript怎么禁用浏览器后退按钮
Mar 27 #Javascript
js弹出确认是否删除对话框
Mar 27 #Javascript
You might like
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
Vue项目打包编译优化方案
2020/09/16 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
Python中编写ORM框架的入门指引
2015/04/29 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
python正则表达式面试题解答
2020/04/28 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
python logging 日志的级别调整方式
2020/02/21 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
法律专业应届本科毕业生求职信
2013/10/25 职场文书
公积金转移接收函
2014/01/11 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
python tqdm用法及实例详解
2021/06/16 Python