查找页面中所有类为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 相关文章推荐
How to Auto Include a Javascript File
Feb 02 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
Oct 01 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
Js sort排序使用方法
Oct 17 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
Apr 02 Javascript
使用js画图之画切线
Jan 12 Javascript
浅谈JavaScript超时调用和间歇调用
Aug 30 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
浅析Bootstrap缩略图组件与警示框组件
Apr 29 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
微信小程序 向左滑动删除功能的实现
Mar 10 Javascript
vue-resource 拦截器interceptors使用详解
Jan 18 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下实现折线图效果的代码
2007/04/28 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
python实现数据图表
2017/07/29 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
python 日期操作类代码
2018/05/05 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
python 实现按对象传值
2019/12/26 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
董事长助理岗位职责
2014/02/18 职场文书
银行求职自荐书
2014/06/25 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL