通过jQuery选择一个元素,我遇到了问题。

我有一个具有特殊字段的HTML表。您可以在此处查看该字段的结构:



    <td>
      <em class='block'>Create Events:</em>
      -
      <hr style='margin: 8px 0;'>
      <em class='block'>Update Events:</em>
      -
      <hr style='margin: 8px 0;'>
      <em class='block'>Required object:</em>
    </td>





如果在第一个em元素之后跟随“-”(如上例),我想删除该行(td元素的父元素)。

有时在此示例中还存在其他内容:



    <td>
      <em class='block'>Create Events:</em>
      here is something else and this line should not get removed
      <hr style='margin: 8px 0;'>
      <em class='block'>Update Events:</em>
      -
      <hr style='margin: 8px 0;'>
      <em class='block'>Required object:</em>
    </td>





我知道如何通过类名称或元素名称或元素的第一个子元素选择元素。

但是在这种情况下,没有任何效果。如何获取第一个em元素后面的文本并测试它是否为“-”而不是外部字符串?

最佳答案

如果我正确理解您的问题,则可以使用正则表达式来实现所需的功能。这是我为您编写的代码。



<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

</head>

<body>
  <table>
    <tr>
      <td>
        <em class='block'>Create Events:</em> -
        <hr style='margin: 8px 0;'>
        <em class='block'>Update Events:</em> -
        <hr style='margin: 8px 0;'>
        <em class='block'>Required object:</em>
      </td>
    </tr>
    <tr>
      <td>
        <em class='block'>Create Events:</em> here is something else and this line should not get removed
        <hr style='margin: 8px 0;'>
        <em class='block'>Update Events:</em> -
        <hr style='margin: 8px 0;'>
        <em class='block'>Required object:</em>
      </td>
    </tr>
  </table>

  <script>
    $('table tr td').each(function() {
      var content = '<td>' + $(this).html() + '</td>';
      var regex =
        /<td>([\s\S]+?)<em class="block">Create Events:<\/em>([\s\S]+?)-([\s\S]+?)<em class="block">Update Events:<\/em>/i;
      if (regex.test(content)) {
        $(this).closest('tr').remove();
      }
    });
  </script>
</body>

</html>





试试这个,它应该可以正常工作。

注意:在正则表达式中,我使用了"而不是',因为HTML将两种引号都呈现为"

附注:这不是实现此目标的好方法。取而代之的是,您应该将第一行文本包装在具有ID的跨度中,然后查找它是-还是其他任何文本。

10-07 19:59
查看更多