查找页面中所有类为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 相关文章推荐
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
实用的Jquery选项卡TAB示例代码
Aug 28 Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
js实现文字超出部分用省略号代替实例代码
Sep 01 Javascript
整理一下常见的IE错误
Nov 18 Javascript
详解js的事件代理(委托)
Dec 22 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 jQuery
JavaScript中防止微信浏览器被整体拖动的方法
Aug 25 Javascript
微信小程序下拉框功能的实例代码
Nov 06 Javascript
js实现全选反选不选功能代码详解
Apr 24 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
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
EsLint入门学习教程
2017/02/17 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
python采集博客中上传的QQ截图文件
2014/07/18 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
采购主管工作职责
2013/12/12 职场文书
学生宿舍管理制度
2014/01/30 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
青春奉献演讲稿
2014/05/08 职场文书
公司建议书怎么写
2014/05/15 职场文书
教师个人事迹材料
2014/12/17 职场文书
创业计划之特色精品店
2019/08/12 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android