Js关于getElmentsByClassName()的兼容与封装
来源:互联网 发布:seo服务公司 编辑:程序博客网 时间:2024/06/06 07:39
getElmentsByClassName()的兼容与封装
一.思路
- 我们知道getElmentsByClassName()是通过类名来获取标签,但在IE6、7、8中,它存在一丢丢的兼容问题。为解决这个兼容问题,我们的大体思路是封装函数,在函数里先判断浏览器是否支持getElmentsByClassName(),如果支持则直接返回,如果不支持就得进行判断了。
- 如果浏览器不支持:通过getElmentsByTagName("*")获得所有的标签,进行遍历,通过判断当前标签的ClassName与所要查找的是否一样再进行下一步,如果不一样不进行操作,如果一样则将其留下。
- 关于classname一样的如何留下:提前声明一个空的数组,如果一样则将其推进push();数组中。
二. 初步封装
- 代码:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><style>div{width: 150px;height: 150px;background-color: pink;margin: 10px;}.demo{background-color: red;}</style><script>//封装类名window.onload=function(){//var dom=document.getElementsByClassName("demo");主流浏览器function getclass(classname){//如果浏览器支持,则直接返回if(document.getElementsByClassName){return document.getElementsByClassName(classname);//不用加else 因为return直接返回了}var arr=[];//用于存放满足的数组var dom=document.getElementsByTagName("*");//所有的,遍历,判断for (var i=0;i<dom.length;i++) {if(dom[i].className==classname){//推进数组里面arr.push(dom[i]);}}return arr;//返回符合的}getclass("demo");alert(getclass("demo").length);//该类名标签的个数}</script></head><body><div></div><div class="demo"></div><div></div><div></div><div class="demo"></div><div></div><div></div><div></div><div></div><div class="demo"></div></body></html>
- 效果:
三. 封装类名(分割)
- 当类名中包含几个类时上面的方法就不完善了,因此我们要把每个标签的类名分割后再进行判断。
- 关于分割:分割可以利用将字符串转换为数组,当然每个小类之间转换符号是空格,因此split(" ");
- 代码:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><style>div{width: 150px;height: 150px;background-color: pink;margin: 10px;}.text{background-color: red;}</style><script>//封装类名window.onload=function(){//var dom=document.getElementsByClassName("demo");主流浏览器function getclass(classname){//如果浏览器支持,则直接返回if(document.getElementsByClassName){return document.getElementsByClassName(classname);//不用加else 因为return直接返回了}var arr=[];//用于存放满足的数组var dom=document.getElementsByTagName("*");//所有的,遍历,判断for (var i=0;i<dom.length;i++) {var txt=dom[i].split(" ");//分割此标签的小类名 在小类名里面遍历看是否有一样的for (var j=0;j<txt.length;j++) {if(txt[j]==classname){//存在符合的类 向arr数组中推domarr.push(dom[i]);}}}return arr;//返回符合的}getclass("text");alert(getclass("text").length);该类名标签的个数}</script></head><body><div></div><div class="demo"></div><div></div><div class="text"></div><div class="demo"></div><div></div><div></div><div></div><div></div><div class="demo text"></div></body></html>
- 效果:
四.添加id
- 如果只想选择某个div(有id)下面的某类标签,则需要再向函数传递id作为形参判断,先判断浏览器是否支持,再判断是否有id,其他思路同前。
- 代码:
<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><style>div{width: 150px;height: 150px;background-color: pink;margin: 10px;}#one .text{background-color: red;}</style><script>//封装类名window.onload=function(){function getclass(classname,id){if(document.getElementsByTagName)//游览器支持{//有id的时候if(id){var eleid=document.getElementById(id);return eleid.getElementsByClassName(classname);}else//没有id的时候{return document.getElementsByClassName(classname);}}//不支持的时候if(id){var eleid=document.getElementById(id);var dom=eleid.getElementsByTagName("*");//获取id下面的所有元素}else{var dom=document.getElementsByTagName("*");}var arr=[];//用于存放满足的数组var dom=document.getElementsByTagName("*");//所有的,遍历,判断for (var i=0;i<dom.length;i++) {var txt=dom[i].split(" ");//分割此标签的小类名 在小类名里面遍历看是否有一样的for (var j=0;j<txt.length;j++) {if(txt[j]==classname){//存在符合的类 向arr数组中推domarr.push(dom[i]);}}}return arr;//返回符合的}getclass("text","one");alert(getclass("text","one").length);}</script></head><body><div></div><div class="demo"></div><div></div><div class="text"></div><!--只需要#one里的 .text--><div id="one"><div class="demo"></div><div></div><div></div><div></div><div></div><div class="demo text"></div></div></body></html>
- 效果:
阅读全文
0 0
- Js关于getElmentsByClassName()的兼容与封装
- js事件封装(已兼容)
- 使用原生js封装的ajax(兼容jsonp)
- 自己封装的兼容事件处理eventHandler.js
- 关于JS中的Ajax对象的兼容
- 关于JS的浏览器兼容1
- js与浏览器的兼容Compatibility
- <转载> 关于js常用方法的封装
- js封装id与class选择器代码,兼容ie低版本
- getElmentsByClassName用法
- 封装兼容的Ajax请求
- 简析Js对象的封装与实践
- 深入浅出JS的封装与继承
- 关于ie和360兼容模式不支持js的instanceof
- 关于MsChart的封装与实现
- 封装的一个JS拖拽效果,兼容所有主流浏览器
- 一个优秀的全兼容JS获取图片尺寸封装,无需onload完全完即能得到尺寸
- web前端.js--seajs--非CMD模块的javascript文件兼容封装方案
- stm32的串口发送16进制数据,上位机16进制显示
- h5新标签video详解
- SQLite剖析之功能特性
- 深入了解MyBatis参数
- 空函数、裸函数与函数传参和堆栈平衡
- Js关于getElmentsByClassName()的兼容与封装
- python语法介绍
- java内存溢出分析工具:jmap使用实战
- xml转化java对象
- 自动化测试如何起步
- PCL-Kd-Tree
- 一道 Google 的面试题
- Android好用的5个开源库
- 替换python字典中的key值