【问题标题】:jquery exact match in html tablehtml表中的jquery完全匹配
【发布时间】:2017-03-02 12:29:15
【问题描述】:

我要编辑一个插件,但我的 jquery 列表有问题,它过滤和隐藏了 table/html 的一些元素。

$(document).ready(function(){
    $('tr').find('td:contains("1,0")').closest('tr').hide();
    $('tr').find('td:contains("1.0")').closest('tr').hide();
});

这就是我现在使用它的方式。功能是我不想在行中的任何地方看到带有“1,0”和“1.0”的行。 “1,0”或“1.0”周围可以有任何东西。像“汽车 1,0”或“纸 1.0”。

我遇到的问题是,此代码还隐藏了“paper 11.00”和“cars 1,020”之类的行。 Anyrow 包含任何形式的“1.0”“1,0”。

谁能帮我调整“过滤器”,避免隐藏“11.00”或“1,020”?

【问题讨论】:

标签: javascript jquery html regex


【解决方案1】:

使用.filter()td.text().match 与正则表达式\b1[.,]0\b 匹配1.01,0

$(document).ready(function() {
  $('td')
    .filter(function() {
      return $(this).text().match(/\b1[.,]0\b/)
    })
    .closest('tr')
    .hide();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td>1.0</td>
  </tr>
  <tr>
    <td>1,0</td>
  </tr>
  <tr>
    <td>1.01</td>
  </tr>
  <tr>
    <td>11.0</td>
  </tr>
  <tr>
    <td>var 1.0 bar</td>
  </tr>
  <tr>
    <td>var 1,0 bar</td>
  </tr>
  <tr>
    <td>1 . 0</td>
  </tr>
</table>

【讨论】:

  • 也谢谢@justinas 的工作。一开始它的运行速度很慢,但现在它运行得像疯了一样。你知道为什么它一开始表现这么差吗?
【解决方案2】:

使用JQuery$.each()RegExp.prototype.test()函数的解决方案:

$(document).ready(function(){
    $('tr td').each(function(i, el){
        if (/\b(1\.0|1,0)\b/g.test($(el).text())) {
            $(el).closest('tr').hide();
        }   
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table border="1">
<tr><td>11.0</td></tr>
<tr><td>cars 1,020</td></tr>
<tr><td>1.0</td></tr>
<tr><td>cars 1,0</td></tr>
</table>

【讨论】:

  • 感谢 RomanPerekhrest 的解决方案。你的代码就像一个魅力,而且非常快。只有一个问题:它只“隐藏”其中找到 1,0 等的单元格。我需要它来隐藏整行,就像它与 td:contains 一起使用一样。我错过了什么吗?
  • @LionKing,添加了父 tr(row) 的获取。现在它工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多