实现jquery 的 removeClass 方法

xiaoxiao2021-02-28  147

第一种 纯数组操作

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>removeclass</title> </head> <body> <div class="demo test hi"></div> <button onclick="removeClass()">Go</button> <script> let demo = document.querySelectorAll(".demo") function removeClass() { let start = new Date().getTime() // 删除test的class名 let classArr = [] for(let i = 0, l = demo.length; i < l; i++) { demo[i].className.split(' ').map(function(val) { if(val !== 'test') { classArr.push(val) } }) demo[i].className = classArr.join(' ') classArr = [] } let end = new Date().getTime() console.log(end - start) } </script> </body> </html>

这里的思路是获取dom的className,然后转化为array操作再将结果转化为str赋值给className

第二种 正则匹配

function removeClass() { let start = new Date().getTime() // 删除test的class名 let classArr = [] for(let i = 0, l = demo.length; i < l; i++) { demo[i].className.replace('test', '').split(/\s+/g).map(function(val) { if(val !== 'test') { classArr.push(val) } }) demo[i].className = classArr.join(' ') classArr = [] } let end = new Date().getTime() console.log(end - start) }

这里的思路与上面差不多,不过是用正则去判断要除去的className

效率

即使在操作的dom长度增加到300,两者的耗时也几乎不差。所以两者效率是一样的

转载请注明原文地址: https://www.6miu.com/read-21714.html

最新回复(0)