如何删除以字母+数字开头的HTML属性?

How to remove HTML attribute starting with letter + number?

提问人:Renato Ramos Puma 提问时间:6/9/2023 最后编辑:trincotRenato Ramos Puma 更新时间:6/9/2023 访问量:42

问:

我想删除以字母“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>

问题是什么?

jQuery 正则表达式 attr

评论

1赞 Barmar 6/9/2023
不要使用 for 常量,仅在动态创建正则表达式时才使用。new RegExp
1赞 Barmar 6/9/2023
的参数不是函数,而是命名属性的字符串。您需要遍历所有属性,测试它是否匹配,然后将其删除。removeAttr()
1赞 Barmar 6/9/2023
您的正则表达式后面没有数字,因为量词以 .用于匹配至少 1 个数字。z0\d+
1赞 Roko C. Buljan 6/9/2023
只是出于好奇,谁/什么首先插入了这些 HTML5 无效属性?

答:

1赞 trincot 6/9/2023 #1

您的尝试存在以下几个问题:

  • removeAttr不将函数作为参数。您必须传递属性的名称(字符串)。
  • 不会对属性进行迭代。为此,您可以使用该集合this.attributes
  • 这将允许字母跟在末尾。这不是你在问题中所说的。\w+
  • 正则表达式缺少字符串末尾标记,因此它还允许该模式与其他字符一起出现在长字符串中间的某个位置。

也:

  • 当您已经拥有正则表达式文本时,您不需要构造函数RegExp
  • {1}在正则表达式中是无用的。
  • {0,}相当于*
  • 要检查字符串是否与正则表达式匹配,您不需要(返回一个数组),但可以更好地使用 .matchtest

$("#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
了不起。这是作品!