在新手使用原生JavaScript时,常常会用到document.getElementById、document.getElementsByClassName以及document.getElementsByTagName等方式来获取到元素,进而对其进行操作。但IE9以下的版本却不支持document.getElementsByClassName方法,所以很多刚开始接触js的同学往往会很困惑这个问题。这里封装了一下三种方法的的函数,使其都能完美使用三种方法,希望能对大家有所帮助。
这里使用的$符号作为函数名。同时在传递参数时,第二个参数可以不写。
-
- function $(param, obj) {
- obj = obj || document;
- if (param.charAt(0) === "#")
- return document.getElementById(param.slice(1));
- if (param.indexOf(".") === 0)
- return getByClass(param.slice(1), obj);
-
- return obj.getElementsByTagName(param);
- }
-
-
- function getByClass(className, obj) {
- obj = obj || document;
- <span style="white-space:pre"> </span>
- if (obj.getElementsByClassName)
- return obj.getElementsByClassName(className);
-
-
- var result = [];
-
- var tags = obj.getElementsByTagName("*");
-
- for (var i = 0, len = tags.length; i < len; i++) {
-
- var classNames = tags[i].className.split(" ");
-
- for (var j = 0, l = classNames.length; j < l; j++) {
- if ( classNames[j] === className ) {
- result.push(tags[i]);
- break;
- }
- }
- }
-
-
- return result;
- }
下面的函数在确定浏览器不支持document.getElementsByClassName方法后,将传进来的父元素的子元素添加到一个数组中,之后对其进行遍历,将其元素的类名通过空格拆分(即split方法),最后对类名进行判断,将包含所需类名的元素名通过push()保存到数组result中,最后返回result。