查找页面中所有类为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 相关文章推荐
js+FSO遍历文件夹下文件并显示
Mar 07 Javascript
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
快速使用Bootstrap搭建传送带
May 06 Javascript
JQuery异步加载PartialView的方法
Jun 07 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
浅谈Node模块系统及其模式
Nov 17 Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 Javascript
Javascript如何实现扩充基本类型
Aug 26 Javascript
使用Ajax实现无刷新上传文件
Apr 12 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
jquery 实现的全选和反选
2009/04/15 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
浅谈js闭包理解
2019/03/28 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
求职信需要的五点内容
2014/02/01 职场文书
有兼职工作经历的简历自我评价
2014/03/07 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
运动会广播稿300字
2015/08/19 职场文书
八年级物理教学反思
2016/02/19 职场文书
创业计划书之服装
2019/10/07 职场文书