关于解决IE8以下版本获取DOM节点的方法
在前端开发中用 js 对 html 进行操作,在获取DOM节点的时候我们会用到类选择器,但是类选择器并不是能够在所有的浏览器下正常运行,或许大家已经猜到,没错就是IE(8以下),或许有人会所现在谁还用IE,但是作为一个程序员,在遇到问题我们都应该去寻找解决的方法,那我们就得自己来封装获取类名节点的方法,下面是我自己的一些方法。
下面是我代码:
<style>
.box{
width: 200px;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
首先创建一个div,给其默认样式,效果如下;
当我们用各个浏览器都可以获得类名DOM节点,但是IE8一下就死这种情况:
所以,我们就得自己来封装一个函数,来获取html中的DOM操作节点。
代码如下:
<script type="text/javascript">
if (!document.getElementsByClassName) { //如果浏览器不支持document.getElementsByClassName
document.getElementsByClassName = function (className, element) { //我们先将要写的方法封装成一个函数
var children = (element || document).getElementsByTagName('*'); //获取html中所有的DOM节点
var elements = []; //用一个空数组存放要获取的class类名
for (var i = 0; i < children.length; i++) {
var child = children[i];
var classNames = child.className.split(' '); //将所有的class节点保存在一个数组之中
for (var j = 0; j < classNames.length; j++) { //遍历循环,将满足要求的class存入elements空数组中
if (classNames[j] == className) {
elements.push(child);
break;
}
}
}
return elements; //返回新的数组
};
}
var a = document.getElementsByClassName("box");
console.log(a);
a[0].style.background = "blue";
</script>
整体思路:
1.先判断是否支持 document.getElementsByClassName
直接获取class
DOM节点
2.先获取html所有的DOM节点,并新建一个数组存放需要获取的class
类名
3.循环遍历,将满足要求的class存入elements空数组中
4.返回我们得到的新的数组,这个数组就是我们存放类名的数组
我们先看下 a
打印出来的什么什么
很显然打印出来的是一个数组对象,那么我们就可以通过索引对class进行操作了;
下面是我执行的结果:
这就证明我们用类名对html进行了操作节点进行了操作。