如何用JS判断标签是否含有某个类

(好久没更新了。有同学在催更了,看完毕业班辣眼睛的论文,眼睛痛,写个博文,就当休息吧。T..T)

有时候,我们需要判断标签是否含有某个类,以便采取对应的操作,比如隐藏这些标签之类的。

有如下结构:

<div id="mydiv" class="header  bar-top top-bar">
    这个是个div
</div>

如何判断它是否含有类  “top”,注意不是找“bar-top”,也不是找“top-bar”,就是找类"top"

方法一:利用正则去检测className的值

当然首先考虑正则啦。

let mydiv = document.getElementById("mydiv");
let  re = /\btop\b/;

if( re.test(mydiv.className) ){
        console.info("有类Top");
}else{
        console.info("没有类top");
}

正则的含义就是判断有无单词“top”。很明显,div中没有top类,应该返回“没有类top”,妥妥的稳当!但是很快被事实打脸了~

WTF?

我到现在才发现正则的单词边界符,居然包含连接符(-)!!!

好嘛,为了避免这个尴尬。强烈建议写类名的时候,不要用连接符(-),不要用连接符(-),不要用连接符(-)~!!

以上的类名,可以用   top_bar 或者 topBar之类的方式替换。

但是,别人习惯了这么写,怎么办?

修改正则~!!把有连接符的情况排除掉。

let mydiv = document.getElementById("mydiv");
let  re = /(?<!-)\btop\b(?!-)/;

if( re.test(mydiv.className) ){
        console.info("有类Top");
}else{
        console.info("没有类top");
}

这里解释下: 

(?<!x)  ,表示前面不包含字符x。   ?<!   就是“前面不包含”,需要写在()里。

(?!x),表示后面不包含字符x。       ?!  “后面不包含”,需要写在()里。

By the way:

(?<=x)  ,表示前面包含字符x。   ?<=   就是“前面包含”,需要写在()里。

(?=x),表示后面包含字符x。       ?=  “后面包含”,需要写在()里。

方法二:利用标签的classList属性的方法contains()

突然发现标签的classList操作类,真的很方便~Nice~

contains()返回值为true,有类;返回false,没有类。

let mydiv = document.getElementById("mydiv");


if( mydiv.classList.contains("top") ){
        console.info("有类Top");
}else{
        console.info("没有类top");
}

方法三:jQuery的方法hasClass()

查找有无类的这种常见操作,jQuery早就封装好了方法hasClass()。

hasClass()返回值为true,有类;返回false,没有类。

if( $("#mydiv").hasClass("top") ){
        console.info("有类Top");
}else{
        console.info("没有类top");
}

jQuery真心强大,不过现在有被淘汰的趋势。毕竟,浏览器标准大统一的时代即将来临了。但是我相信“老兵不死”!

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值