###document(element).getElementsByClassName(classNames:classString);
HTML5新添加了这个方法,这个方法可以通过document和html元素调用,接受一个参数,这个参数包含一个或多个类名的字符串,返回带有制定类型的NodeList(存在性能问题),传入的多个类型顺序不重要。这个方法仅仅在标准浏览器下有效,在非标准浏览器下无效。

 <body><p class="p1 p">p1 p</p><p class="p"> p</p><script type="text/javascript">var aP = document.getElementsByClassName(' p p1' );alert(aP.length);/*标准 : 1*//*非标准:Error:对象不支持“getElementsByClassName”属性或方法*/</script></body>

解决兼容性的方式:

 var getElementsByClassName = (function (classList,/*optional*/parent){if(typeof classList !== "string") throw TypeError("the type of classList is error");var parent = parent || window.document;/*添加默认值*/if(parent.getElementsByClassName){/*如果是标准浏览器支持该方法*/return parent.getElementsByClassName(classList);}else{/*如果不支持该方法即非标准浏览器*/var child = parent.getElementsByTagName("*");var nodeList = [];/*获得classList的每个类名 解决前后空格 以及两个类名之间空格不止一个问题*/var classAttr = classList.replace(/^\s+|\s+$/g,"").split(/\s+/);for(var j = 0,len_j = child.length; j<len_j; j++){var element = child[j];for(var i = 0,len_i = classAttr.length; i< len_i; i++){var _className = classAttr[i];if(element.className.search(new RegExp("(\\s+)?"+_className+"(\\s+)?")) === -1){break;}}if(i===len_i) nodeList.push(element);}return nodeList;}});

###classList属性
classList属性是HTML5新增的一个属性,在这个属性下有几个方法:
Add(value)将给定的字符串值增加到列表中,如果存在,就不会添加。
Contains(value)表示列表中是否存在给定的值,如果存在返回true,否则返回false。
Remove(value)从列表中删除给定的字符串。
Toggle(value)如果列表中已经存在给定的值,删除它,如果没有给定的值,增加它。
支持classList的浏览器有Firefox3.6+和chrome和IE10+。
解决兼容性:

 var classList = null;(function(){classList = function (obj){this.obj = obj;};classList.prototype.add = function(value){if(typeof value !== "string") throw TypeError("the type of value is error");if(this.obj.classList){this.obj.classList.add(value);}else{var arr = value.replace(/^\s+|\s+$/g,"").split(/\s+/);this.obj.classList +=" "+arr.join(" ");}};classList.prototype.contains = function(value){if(typeof value !== "string") throw TypeError("the type of value is error");if(this.obj.classList){return this.obj.classList.contains(value);}else{var arr = value.replace(/^\s+|\s+$/g,"").split(/\s+/);var _className = this.obj.className;for(var i = 0,len= arr.length; i<len; i++){if(_className.search(new RegExp("(\\s+)?"+arr[i]+"(\\s+)?"))===-1){return false;}}return true;}};classList.prototype.remove = function(value){if(typeof value !== "string") throw TypeError("the type of value is error");if(this.obj.classList){return this.obj.classList.remove(value);}else{var arr = value.replace(/^\s+|\s+$/g,"").split(/\s+/);var _className = this.obj.className;for(var i = 0, len = arr.length;i<len; i++){if(_className.search(new RegExp("(\\s+)?"+arr[i]+"(\\s+)?"))!==-1){_className =  _className.replace(new RegExp("(\\s+)?"+arr[i]+"(\\s+)?"),"");}}this.obj.className = _className;}};classList.prototype.toggle = function(value){if(typeof value !== "string") throw TypeError("the type of value is error");if(this.contains(value)){this.remove(value);}else{this.add(value);}};})();

getElementsByClassName与classList兼容性问题与解决方案相关推荐

  1. html 布局兼容性,HTML+CSS入门 浏览器兼容性问题及解决方案

    本篇教程介绍了HTML+CSS入门 浏览器兼容性问题及解决方案,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 问题一:不同浏览器的标签默认的外补丁和内补丁不同 问题现象: ...

  2. 常见几种浏览器兼容性问题与解决方案

    常见几种浏览器兼容性问题与解决方案 参考文章: (1)常见几种浏览器兼容性问题与解决方案 (2)https://www.cnblogs.com/lmaster/p/6385035.html 备忘一下.

  3. 【转】常见浏览器兼容性问题与解决方案css篇

    小满语:说到兼容性问题,不得不说一下IE浏览器,尤其是IE9以前,兼容性差的要哭,来,擦擦眼泪,学习一下兼容性问题的解决方案~本篇主要是布局后加样式后导致浏览器显示不统一的情形: 所谓的浏览器兼容性问 ...

  4. [css] 移动端微信页面有哪些兼容性问题及解决方案是什么?

    [css] 移动端微信页面有哪些兼容性问题及解决方案是什么? 1.rem方案通过reset js进行适配 2.vw 方案 搭配px to viewport进行适配 个人简介 我是歌谣,欢迎和大家一起交 ...

  5. “约见”面试官系列之常见面试题第三十六篇之CSS常见兼容性问题及解决方案(建议收藏)

    CSS常见兼容性问题及解决方案: 1. 上下margin重合问题: 问题描述:相邻的margin-left和margin-right是不会重合的,但是相邻的块级元素margin-top 和margin ...

  6. 常见浏览器兼容性问题及解决方案

    常见浏览器兼容性问题及解决方案: 1.不同浏览器的默认内外边距和内外补丁不同. 解决方案:css设置 *{margin:0; padding:0;} *是通配符,匹配所有html标签. 2.块级元素f ...

  7. css 兼容解决方案,css浏览器兼容_CSS浏览器兼容性问题及解决方案

    摘要 腾兴网为您分享:CSS浏览器兼容性问题及解决方案,云南移动,优化大师,央视影音,心视界等软件知识,以及赣教云教学通2.0,少儿趣配音,中辉期货,单机,轻笔记,鸿合实物展台,008神器,酷有,电子 ...

  8. 1.最全整理浏览器兼容性问题与解决方案

    常见浏览器兼容性问题与解决方案 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或 ...

  9. VUE关于hevc编码格式的视频在各端浏览器兼容性问题的解决方案

    关于hevc编码格式的视频在各端浏览器兼容性问题的解决方案 1.背景描述 最近开发中遇到了一个视频的兼容问题,同样的都是MP4格式的视频,但是他们编码方式不一样就会导致可能不能正常播放,其根源在于编码 ...

最新文章

  1. 假如我是超级卷王。。。
  2. opensuse 安装 php,在openSUSE上安装和配置LAMP(2)
  3. SAP RETAIL 如何确定自动补货触发的单据类型 II
  4. bzoj 3118: Orz the MST(单纯形)
  5. 那些你不知道的Chrome(1)
  6. python websocet回调_python – 线程,非阻塞websocket客户端
  7. 源码里没有configure_深入源码理解.NET Core中Startup的注册及运行
  8. Redis 与 set(无序集合) 相关的常用命令
  9. Ubuntu20.04配置Java环境
  10. pytorch def __init__(self, num_classes, bkg_label, top_k, conf_thresh, nms_thresh):
  11. Extjs学习(3):事件和动作
  12. 数制转换c语言 1a 26,C语言数制转换
  13. 小米air2se耳机只有一边有声音怎么办_校园场景实测,JEET ONE与小米Air 2se蓝牙耳机哪款更好用?...
  14. php活体检测,活体检测
  15. 项目三:声乐盒(音节+音乐)实验
  16. 【达梦数据库的console工具进行备份恢复遇到报错:bakres连接DMAP失败】
  17. JAVA视频学习笔记-马士兵(七)
  18. 麦芒6手机一键root,华为麦芒6怎么使用
  19. Selenium原理及安装教程
  20. 部署支持使用Redis哨兵模式,支持纳管ClickHouse数据库,JumpServer堡垒机v2.28.0发布

热门文章

  1. 苹果怎么取消自动续费?自动扣费不用慌,教你一招快速关闭
  2. Java元宵趣图_2017元宵节gif动态表情包-2017元宵节微信动态图片大全完整无水印版-东坡下载...
  3. 使用js提交form表单的两种方法
  4. Windows修改hosts文件的方法
  5. 课程向:深度学习与人类语言处理 ——李宏毅,2020 (P22)
  6. 学生学籍管理系统登陆jdbc报错
  7. 天地劫幽城再临服务器维护,天地劫幽城再临3月25日更新公告 天地劫幽城再临3月25日更新内容详情_手心游戏...
  8. 【个人学习用】利用随机森林学习调参总结
  9. 拼多多上货助理怎么上传产品
  10. 抹杀员工积极性的8个事情