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

sqserrrh  于 2023-06-22  发布在  jQuery
关注(0)|答案(1)|浏览(133)

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

有什么问题吗?

wyyhbhjk

wyyhbhjk1#

在您的尝试中有几个问题:

  • 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>

相关问题