前言
阿里巴巴,
网络前端实习生就要有一个在线测试了。其实我是一个先恶补知识的菜鸟。所以百度谷歌以前在阿里巴巴学校做过前端测试题,觉得自己真的被鄙视了,完全不懂。AH网是在阿里巴巴网上写的,百度谷歌是不是给我们一个机会
当你看到这个问题时,我认为你应该总结一些你使用的方式,比如jQuery,有一些
方法可以使
浏览器兼容,或者
工具类,这对将来的开发很有好处。
HTML
为了方便起见,让我们写下HTML
复制代码代码如下所示:
找到我
也
发现我
我们省略了CSS,我们的重点不是CSS样式是如何编写的,我们希望使用Javascript通过样式名找到一组节点。
实现方法
1 getelementsbyclassname
复制代码代码如下所示:
console.log(document.getelementsbyclassname());
console.log(document.getelementsbyclassname(B));
结果(火狐27)
事实上,我认为我应该能够
解决这个问题,但看看它的
兼容性,我认为这应该是另一种方式找到一种方式。
2 querySelectorAll
复制代码代码如下所示:
console.log(document.queryselectorall(,));
console.log(document.queryselectorall(。B。));
让我们看看结果是什么,与上面有什么
区别 第二个结果是不同的。如果原querySelectorAll
参数有两个,需要用逗号隔开。实际上,这意味着具有样式或B样式的节点可以匹配。
事实上,这种方法的兼容性不是很好。
基于对以上问题的相容性(毕竟,在中国的浏览器IE6 / 7 / 8仍然是大多数),我没有办法做我自己。
3 querynodesbyclass
我想我应该先说出我的想法。
(1)首先获得整个页面的每个节点。
(2)遍历每个节点和它的类
名字符串
(3) to operate the className string, first to divide into an array with a space, then one object, and set up its key as each element of the array, then the corresponding value is true
(4)现在的问题是根据传入的参数(例如选择器的参数)
现在让我们给出代码
复制代码代码如下所示:
函数的StringToObj(字符串){
var arr = string.split()。Sort();
var结果{ };
对于(var i = arr.length-1;ARR {我};我--){
结果{ {我} } =真实度;
}
返回结果;
}
复制代码代码如下所示:
功能stringtoarray(字符串){
var arr = string.split()。Sort();
var结果{ };
对于(var i = arr.length-1;ARR {我};我--){
result.push(ARR {我});
}
返回结果;
}
复制代码代码如下所示:
功能querynodesbyclass(className){
/想法(1)
所有变量= document.getelementsbytagname(*),all.length len =结果= { };
VaR的CNAME = stringtoarray(类名); / /想法(4)
对于(var i = 0;i;i;+;+)遍历每个节点对应的思想(2)
这个想法是 / /(3)是stringtoobj方法
无功dom_cname = StringToObj(所有{我}。类名),cname_len = cname.length;
对于(var j = 0;J < cname_len;j++){
如果(!dom_cname { } }){ CNAME {J}.
打破;
}
如果(J = cname_len)
{
Result.push(所有{我});
} }
返回结果;
}