• 我转过几个弯 绕过那个小雨楼
  • 拿着蒲扇摆着衣衫渡着紧箍咒
  • 不问天涯不停留 喝过几壶酒
  • 不过年少白头道义放胸口
  • 倘若明天之后 遥看前尘剑封侯
  • 似那天上神仙无所求
  • 朝朝暮暮君如梦醒十分不为何理由
  • 是真是假是惶恐是无休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 又过了几个弯 算尽天量道莫慌
  • 踏这田园闻这芳草香
  • 跌跌撞撞仗剑天涯折煞不枉无笔良
  • 是梦是幻是温柔是家乡
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 谁能与我一醉方休

原生js获取、添加、删除元素class

297 0

className方式

我自己之前学es5的时候,老师教我们是用的是className属性,他是dom的一个属性,返回元素的class值,兼容性可以说是通杀吧,所有浏览器都是支持的,但是,他是一个string操作。

document.getElementById('myid').className; 

他会返回一个string的值(空的话返回empty string,empty string===“”,length为0),而class的设置,他是需要空格的:class="class1 class2",当我们添加一个新的class时就不得不考虑空格的问题:

document.getElementById('myid').className += " class2";

这个空格我们甚至还需要判断,这个元素有没有class,没有class的话,开头就不需要空格,删除的时候,也只能用replace方法

let $myid = document.getElementById('myid');
$myid.className = $myid.className.replace("class2","");

当class删除后,你会发现会有多余的空格,因为我们没有对这个空格做处理,添加时插入的空格成了残余,久而久之就会非常长,为此,我们不得不写一套解决这个空格问题的逻辑判断,非常要命,那会,我就不太喜欢使用js来修改class。

getAttribute

getAttribute的兼容性也是全兼容,获取元素的行内属性。

var classVal = document.getElementById("id").getAttribute("class"); 

//删除的话 
classVal = classVal.replace("someClassName",""); document.getElementById("id").setAttribute("class",classVal ); 

//添加的话 
classVal = classVal.concat(" someClassName"); document.getElementById("id").setAttribute("class",classVal ); 

//替换的话 
classVal = classVal.replace("someClassName","otherClassName"); document.getElementById("id").setAttribute("class",classVal );

可以看到getAttribute也是string操作,不可避免的,会有空格问题,所以用起来也很蛋疼。

classList

html5新增了classList属性,他旗下有四个方法:

  1. add(value) 添加类名,如果有则不添加
  2. contains(value) 判断是否存在类名,返回Boolean值
  3. remove(value) 从列表中删除类名
  4. toggle(value) 切换类名:如果列表中存在则删除,否则添加

兼容性:ie10及以上、谷歌8.0及以上、火狐3.6及以上、safari 5.1及以上、open 11.5及以上

从现在的时间来看,这个属性已经可以通杀了,如果你的项目远古,可能还要考虑,但是,大人,时代变了,是时候迎接未来了。

这个方法极度方便,不会有空格残留,实在是给力,随便抄两个例子好了

//增加:
document.getElementById("myDIV").classList.add("mystyle", "anotherClass", "thirdClass");

//去除:
document.getElementById("myDIV").classList.remove("mystyle");

推荐使用该属性,不用再写一段判断空格的js了,省了多少事。

如果想让不支持该属性的地方使用该方法,可以使用下面的兼容代码,兼容ie9及以下,在使用改方法之前先使用该兼容库。

if (!("classList" in document.documentElement)) {
    Object.defineProperty(HTMLElement.prototype, 'classList', {
        get: function() {
            var self = this;

            function update(fn) {
                return function(value) {
                    var classes = self.className.split(/\s+/g),
                        index = classes.indexOf(value);

                    fn(classes, index, value);
                    self.className = classes.join(" ");
                }
            }

            return {
                add: update(function(classes, index, value) {
                    if (!~index) classes.push(value);
                }),

                remove: update(function(classes, index) {
                    if (~index) classes.splice(index, 1);
                }),

                toggle: update(function(classes, index, value) {
                    if (~index)
                        classes.splice(index, 1);
                    else
                        classes.push(value);
                }),

                contains: function(value) {
                    return !!~self.className.split(/\s+/g).indexOf(value);
                },

                item: function(i) {
                    return self.className.split(/\s+/g)[i] || null;
                }
            };
        }
    });
}
0
  • 本文分类:JavaScript
  • 本文标签:添加javascript删除domclass替换判断
  • 流行热度:已超过 297 人围观了本文
  • 最后更新:2021年01月21日 - 14时25分42秒
  • 发布日期:2021年01月21日 - 14时22分00秒
  • 版权申明:本文系作者@木灵鱼儿原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

相关文章

微信收款码
微信收款码