【问题标题】:Filtering by data attribute按数据属性过滤
【发布时间】:2016-07-08 16:49:22
【问题描述】:

我正在尝试使用 filter 来查找包含两个不同数据属性中的特定值的表格行(除了一般文本)。

我似乎无法正确读取这两个数据属性的值。将值(licData 和 stateData)输出到控制台显示“未定义”。当然,搜索也会失败。

JS

var $rows = $('.livesearch tr');

$('#search').keyup(function() {
  var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();

  $rows.show().filter(function() {

    var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
    var licData = $(this).find('td').attr('data-lic');
    var stateData = $(this).find('td').attr('data-state');

    console.log(text + '-' + licData + '-' + stateData + '<br>');

    if (!~stateData.indexOf(val) || !~licData.indexOf(val) || !~text.indexOf(val)) {
      return true;
    } else {
      return false
    }

  }).hide();
});

示例表行

<tr>
  <td>Aaron</td>
  <td>Ellebrach</td>
  <td>Clerical</td>
  <td>444-444-4444</td>
  <td>Call</td>
  <td data-lic="special">C</td>
  <td data-state="state data here">CA</td>
</tr>  

【问题讨论】:

    标签: jquery filter attributes livesearch


    【解决方案1】:

    试试:

    var licData = $(this).find('td[data-lic]').attr('data-lic');
    var stateData = $(this).find('td[data-state]').attr('data-state');
    

    您的代码:

    $(this).find('td').attr('data-lic')
    

    实际上为您提供了第一个 td 的属性,这显然是未定义的,但是当您执行 $(this).find('td[data-lic]') 时,您实际上是在寻找具有此数据属性的任何 td,因此您会得到如下值:-

    var licData = $('tr').find('td[data-lic]').attr('data-lic');
    var stateData = $('tr').find('td[data-state]').attr('data-state');
    console.log('licData:   ' + licData);
    console.log('stateData: ' + stateData);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
    <table>
      <tr>
        <td>Aaron</td>
        <td>Ellebrach</td>
        <td>Clerical</td>
        <td>444-444-4444</td>
        <td>Call</td>
        <td data-lic="special">C</td>
        <td data-state="state data here">CA</td>
      </tr>
    </table>

    【讨论】:

    • 感谢 plalash,它可以检索这些值。出于某种原因,当我尝试在这两个项目上测试 indexOf(val) 时出现错误。测试 'text' 变量时工作正常,但 stateData 和 licData 都返回:TypeError: undefined is not an object (evalating 'licData.indexOf')
    • 不确定这里有什么问题。您能否在jsFiddle 上发布一个说明您的问题的功能示例。这真的可以帮助我找出你的代码的问题。另外,如果可能的话,将其作为一个新问题发布,以便其他用户也可以查看它并提供解决方案。
    • 我在这里设置了 jsFiddle:jsfiddle.net/dmacy/148zdhm7。如果从 IF 子句中删除了 licData 和 stateData ,它就会起作用,并且控制台会显示这些变量正在获取数据。但是在这两个变量上使用 indexOf 似乎有问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多