查找页面中所有类为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 相关文章推荐
javascript实现仿银行密码输入框效果的代码
Dec 13 Javascript
js里的prototype使用示例
Nov 19 Javascript
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
AJAX 网页保留浏览器前进后退等功能
Feb 12 Javascript
最常用的12种设计模式小结
Aug 09 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
Mar 09 Javascript
javascript判断数组内是否重复的方法
Apr 21 Javascript
JavaScript中的this机制
Jan 30 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
Jul 20 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代码简化
2010/02/08 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php简单判断文本编码的方法
2015/07/30 PHP
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
使用Python写CUDA程序的方法
2017/03/27 Python
Python判断telnet通不通的实例
2019/01/26 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
Pycharm安装python库的方法
2020/11/24 Python
python代码实现猜拳小游戏
2020/11/30 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
万能检讨书2000字
2014/10/17 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
营销计划书
2015/01/17 职场文书
2015年科室工作总结
2015/04/10 职场文书
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
Golang bufio详细讲解
2022/04/21 Golang