查找页面中所有类为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提交并解析后台返回的XML的代码
Nov 03 Javascript
JavaScript Cookie的读取和写入函数
Dec 08 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
用jquery存取照片的具体实现方法
Jun 30 Javascript
使用JS读秒使用示例
Sep 21 Javascript
jQuery绑定事件不执行但alert后可以正常执行
Jun 03 Javascript
JS获取网页图片name属性的方法
Apr 01 Javascript
Javascript中判断对象是否为空
Jun 10 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
JavaScript核心语法总结(推荐)
Jun 02 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
js实现验证码干扰(静态)
Feb 22 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
php discuz 主题表和回帖表的设计
2009/03/13 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
Python双链表原理与实现方法详解
2020/02/22 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
房地产活动策划方案
2014/05/14 职场文书
就业意向协议书
2015/01/29 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
Python语言中的数据类型-序列
2022/02/24 Python