【问题标题】:jQuery regex match not appending to a div classjQuery 正则表达式匹配未附加到 div 类
【发布时间】:2021-02-13 02:36:35
【问题描述】:

我有一个带有链接的 ul 类,如果正则表达式匹配,我正在尝试附加到特定的 div 类,但由于某种原因,我的正则表达式匹配得很好,但它没有将它附加到 div 类。我的目标是移动与正则表达式匹配的 ul 类并将其附加到 test3 类。这是我的 html 代码和我的 jquery

HTML 代码

<ul class="links">
<li>
<a class="links active" href="#test">Link </a>
</li>
</ul>

<ul class="links">
<li>
<a class="links active" href="#test">Link </a>
</li>
</ul>

<ul class="links">
<li>
<a class="links active" href="#test">Link </a>
</li>
</ul>

<ul class="links">
<li>
<a class="links active" href="#test">Link </a>
</li>
</ul>

<div class="test3"></div>

jQuery 代码

$(document).ready(function(){
     var test = test.match(/(<ul class="links">[\s\S]*?<a class.*?\[ABC\d\d\d\d\d\]<\/a>\s*<\/li>\s*<\/ul>)/g);
     return test.appendTo('.test3');
});

在正则表达式匹配后,它看起来像:

<div class="test3">
<ul class="links">
<li>
<a class="links active" href="#test"></a>
<li>
</ul>

<ul class="links">
<li>
<a class="links active" href="#test"></a>
<li>
</ul>
</div>

【问题讨论】:

  • 这里有一些问题。首先,您的小提琴不包含对 jQuery 的引用。甚至补充说有一个错误,因为test 没有在任何地方定义。最后一个问题是一种方法——永远,ever,使用正则表达式来解析 HTML。如果您可以编辑问题以描述目标,我们可以向您展示解决问题的正确方法
  • 感谢罗里的回复。我继续编辑了这个问题。我的目标是基本上将与给定正则表达式匹配的 ul 类移动到 test3 类。 JSFiddle
  • 感谢更新我为你添加了答案

标签: html jquery regex


【解决方案1】:

你的逻辑有几个问题。

  • 使用 Regex 解析 HTML 是非常糟糕的做法。请改用 DOM 解析器,并在那里处理元素。由于您已经在页面中包含了 jQuery,因此您可以使用它。
  • 您需要遍历每个 ul 元素以确定其中包含的 a 是否与正则表达式匹配并移动它,而不是克隆 HTML 内容。
  • match() 返回一个字符串数组,而不是您可以调用 append() 的 jQuery 对象。
  • test 未定义。
  • 您需要针对每个ula 的文本内容运行正则表达式,而不是针对整个ul
  • Regex 的 test() 方法更适合您的目的。
  • 在正则表达式中使用\d{N} 而不是重复\d

说了这么多,试试下面的例子。请注意,我使 Regex 不区分大小写。如果它不适合您的需要,您可以轻松修改它。

jQuery($ => {
  let $ul = $('ul.links').each((i, el) => {
    let $el = $(el);
    if (/\[ABC\d{5}\]$/.test($el.find('a').text().trim(), 'i')) {
      $el.appendTo('.test3');
    }
  });
});
.test3 {
  border: 2px solid #C00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="links">
  <li><a class="links active" href="#test">Link [DEF56789]</a></li>
</ul>
<ul class="links">
  <li><a class="links active" href="#test">Link [ABC12345]</a></li>
</ul>
<ul class="links">
  <li><a class="links active" href="#test">Link [DEF12345]</a></li>
</ul>
<ul class="links">
  <li><a class="links active" href="#test">Link [ABC56789]</a></li>
</ul>
<div class="test3"></div>

【讨论】:

  • 谢谢罗里!这正是我想要的。
  • 我注意到这在 IE 11 中不起作用。知道是什么原因造成的吗?
  • 那是因为 IE11 不支持 ES6,所以你需要用匿名函数替换箭头函数。一个更好的主意是完全停止使用 IE11 :)
  • 您还需要将 let 更改为 var
  • 谢谢!现在工作。真的很感激。
猜你喜欢
  • 2012-05-23
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多