提问人:Renato Ramos Puma 提问时间:6/9/2023 最后编辑:trincotRenato Ramos Puma 更新时间:6/9/2023 访问量:42
如何删除以字母+数字开头的HTML属性?
How to remove HTML attribute starting with letter + number?
问:
我想删除以字母“z”开头的属性标签,后跟任何数字(“z#”)。
但是我有错误,正如您在运行此代码片段时所看到的:
$("#main article").each(function(){
var DE = new RegExp(/z{1}(\d{0,})\w+/);
$(this).removeAttr(function (){
return (this.match(DE));
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="main">
<article z1 > AAA </article>
<article z2 > BBB </article>
<article z3 > CCC </article>
<article z101> DDD </article>
<article z102> EEE </article>
<article z103> FFF </article>
</section>
问题是什么?
答:
1赞
trincot
6/9/2023
#1
您的尝试存在以下几个问题:
removeAttr
不将函数作为参数。您必须传递属性的名称(字符串)。- 不会对属性进行迭代。为此,您可以使用该集合
this.attributes
- 这将允许字母跟在末尾。这不是你在问题中所说的。
\w+
- 正则表达式缺少字符串末尾标记,因此它还允许该模式与其他字符一起出现在长字符串中间的某个位置。
也:
- 当您已经拥有正则表达式文本时,您不需要构造函数
RegExp
{1}
在正则表达式中是无用的。{0,}
相当于*
- 要检查字符串是否与正则表达式匹配,您不需要(返回一个数组),但可以更好地使用 .
match
test
$("#main article").each(function(i, article) {
$(this.attributes).each(function () {
if (/^z\d*$/.test(this.name)) $(article).removeAttr(this.name);
});
});
console.log($("#main").html());
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section id="main">
<article z1 > AAA </article>
<article z2 > BBB </article>
<article z3 > CCC </article>
<article z101> DDD </article>
<article z102> EEE </article>
<article z103> FFF </article>
</section>
评论
1赞
Renato Ramos Puma
6/9/2023
了不起。这是作品!
评论
new RegExp
removeAttr()
z
0
\d+