查找页面中所有类为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变换显示图片的实例
Apr 16 Javascript
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 Javascript
ztree获取当前选中节点子节点id集合的方法
Feb 12 Javascript
JavaScript获取当前网页最后修改时间的方法
Apr 03 Javascript
AngularJS入门教程之ng-class 指令用法
Aug 01 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
BootStrap实现带关闭按钮功能
Feb 15 Javascript
C#实现将一个字符转换为整数
Dec 12 Javascript
vue中引入mxGraph的步骤详解
May 17 Javascript
详解vue3.0 的 Composition API 的一种使用方法
Oct 26 Javascript
Vue实现简单购物车功能
Dec 13 Vue.js
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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
Python实现方便使用的级联进度信息实例
2015/05/05 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
python yield关键词案例测试
2019/10/15 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
质量工程师岗位职责
2013/11/16 职场文书
小学校园活动策划
2014/01/30 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
软件项目开发计划书
2014/05/01 职场文书
银行授权委托书格式
2014/10/10 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2014年党总支工作总结
2014/12/18 职场文书
2014公司年终工作总结
2014/12/19 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang