CSS选择器正则表达式的使用
发布日期:2021-05-07 09:43:23 浏览次数:28 分类:精选文章

本文共 2512 字,大约阅读时间需要 8 分钟。

之前项目中有一个功能,需要根据图片URL后缀的扩展名匹配相应的图标,当时是用JS的switch case实现的,因为switch case可以进行多对一匹配,而对象key value只能进行一对一匹配。

今天偶然看到CSS也能进行正则匹配,并且专门就是针对这种场景的,这样以后直接用CSS就行了,性能肯定有所提升。

如果还有同学不明白CSS选择器正则匹配,看看下面几个例子应该马上就能明白了。

/* 匹配所有带href属性的标签 */[href] {   padding-left: 18px;}/* 匹配href开头为https或//的标签 */[href^="https"],[href^="//"] {   	background: url("./images/link.png") no-repeat left;}/* 匹配href开头为#的标签 */[href^="#"] {   	background: url("./images/anchor.png") no-repeat left;}/* 匹配手机和邮箱 */[href^="tel:"] {   	background: url("./images/tel.png") no-repeat left;}[href^="mailto:"] {   	background: url("./images/e-mail.png") no-repeat left;}

效果如下:

在这里插入图片描述
根据图片链接的后缀判断图片类型。

/* 匹配href属性以.pdf结尾的标签 */[href$=".pdf"] {   	background: url("./images/pdf.png") no repeat left;}/* 匹配href属性以.zip结尾的标签 */[href$=".zip"] {   	background: url("./images/zip.png") no repeat left;}/* 图片链接 */[href$=".png"],[href$=".gif"],[href$=".jpg"],[href$=".jpeg],[href$=".webp"] {   	background: url("./images/image.png") no repeat left;}

效果如下:

在这里插入图片描述
除了上面介绍的常用匹配规则外,还有其他的匹配规则:

  1. ^ 表示从字符串开始位置匹配
  2. $ 表示从字符串结束位置匹配
  3. * 表示字符串任意位置匹配
  4. i 表示字符串匹配不区分大小写
  5. g 表示字符串全局匹配

[attr="val"] 选择attr属性值只为val的元素<div attr="val"/>

[attr] 选择有attr这个属性的元素(区分大小写) <div attr="val"/> <div attr /> <div attr="val5435454"/>

[attr~="val"] 选择属性为attr,并且属性值包含val单词的元素(区分大小写) <div attr="text val"/> <div attr="val"/> || 错误的:<div attr="val-ue"/> <div attr="value"/>

[attr$="val"] 选择属性attr的值结尾为val字符的元素 (区分大小写)<div attr="text val"/> <div attr="val"/> <div attr="434val"/> || 错误的:<div attr="val323"/> <div attr="val-ue"/>

[attr^="val"] 选择属性attr的值开头为val字符的元素 (区分大小写)<div attr="val"/> <div attr="val-ue"/> <div attr="value"/>|| 错误的:<div attr="text val"/>

[attr*="val"] 选择属性attr的值任意位置包含val字符的元素(区分大小写)<div attr="text val"/> <div attr="val"/> <div attr="val-ue"/> <div attr="value"/>

[attr|="val"] 选择属性attr的值开头为val的单词或者为val-单词的元素(区分大小写)<div attr="val"/> <div attr="val-ue"/> || 错误的:<div attr="val text "/> <div attr="text val"/> <div attr="value"/>

[attr*="val" I] 或者 [attr*="val" i] 选择属性attr的值任意位置包含val或者VAL或者 Val 或者vAl或者 vaL字符(不区分大小写)的元素<div attr="text val"/> <div attr="val"/> <div attr="val-ue"/> <div attr="value"/><div attr="Val"/> <div attr="VAL"/><div attr="VAl"/> <div attr="vaL"/>

此外,搜索匹配的效果也可以通过根据输入内容动态创建一段CSS代码来实现。

  • 上海市
  • 杭州市
var eleStyle = document.createElement('style');document.head.appendChild(eleStyle);// 文本输入框input.addEventListener("input", function() {   	var value = this.value.trim();	eleStyle.innerHTML = value	? `[data-search]:not([data-search*="${     value}"]) {display: none;}`	: '';});

参考:

上一篇:Vue中mixin的使用
下一篇:快速构建SpringBoot工程

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月28日 19时48分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

.Net中webBrowser控件JS交互 2023-01-23
02-Docker镜像分类及操作秘籍,轻松掌握导出、导入、删除 2023-01-23
04-docker-commit构建自定义镜像 2023-01-23
04-docker系列-commit构建自定义镜像 2023-01-23
05-docker系列-使用dockerfile构建镜像 2023-01-23
09-docker系列-docker网络你了解多少(下) 2023-01-23
10-docker系列-docker文件共享和特权模式 2023-01-23
#C2#S2.2~S2.3# 加入 factory/objection/virtual interface 机制 2023-01-23
#C8# UVM中的factory机制 #S8.1.1# OOP 语言三大特性 systemverilog的支持 2023-01-23
#C8# UVM中的factory机制 #S8.1.4# 约束的重载 2023-01-23
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形 2023-01-24
#C8# UVM中的factory机制 #S8.4.1# factory机制的实现 2023-01-24
900行c语言贪吃蛇,原生js实现的贪吃蛇网页版游戏完整实例 2023-01-24
ado读取多条oracle数据,Oracle ADO数据存取 2023-01-24
asp.mvc 4项目发布文件目录结构_如何用SpringBoot(2.3.3版本)快速搭建一个项目?文末有小彩蛋... 2023-01-24
aspen串联反应怎么输入_如何进步提升串联谐振试验装置的稳定性 2023-01-24
c++ string取子串_Integer与String的设计哲学 2023-01-24
c++ 数组批量赋值_数组之间不能赋值?穿个马甲吧! 2023-01-24
continue可以用if判断里面吗_谁能说说if()else()里的continue是干嘛的? 2023-01-24
ctrl c 和 ctrl v 不能用了_神奇操作,原来CTRL键还能这么用 2023-01-24