查找页面中所有类为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 相关文章推荐
Prototype最新版(1.5 rc2)使用指南(1)
Jan 10 Javascript
jQuery实现表头固定效果的实例代码
May 24 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
May 04 Javascript
JavaScript设计模式之单件模式介绍
Dec 28 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
一览画面点击复选框后获取多个id值的方法
May 30 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
JS sort方法基于数组对象属性值排序
Jul 10 Javascript
JavaScript使用canvas绘制坐标和线
Apr 28 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中的字符串函数
2006/10/09 PHP
第十四节--命名空间
2006/11/16 PHP
php SQL Injection with MySQL
2011/02/27 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
php中fsockopen用法实例
2015/01/05 PHP
php常用表单验证类用法实例
2015/06/18 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
python进阶教程之模块(module)介绍
2014/08/30 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
python脚本和网页有何区别
2020/07/02 Python
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
计算机求职信
2013/12/01 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
婚前协议书怎么写
2014/04/15 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
护理自荐信
2019/05/14 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL