获取与正则表达式匹配的行ID与data属性

时间:2018-11-05 15:55:17

标签: javascript jquery regex filter custom-data-attribute

我有一个功能,

  1. 过滤tr行
  2. 根据传递给函数的值制作批准的正则表达式
  3. 制作一个rtnData数组,该数组由我认为是具有匹配批准的正则表达式的数据属性的行组成。

我想要的只是匹配行的ID,而不是rtnData在做什么。

function filterPay(val){
        // target Rows
            $(".loading tr").hide().filter(function() {

        var rtnData = "";
        //make approved regex based on given value
        var payApproved=    new RegExp(val.map(x => x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join('|'), 'i');

           //make rtnData array? consisting of rows that match regex
            rtnData = (
                        $(this).attr("data-payment").match(payApproved)
            );

        return rtnData;

        }).fadeIn("fast");
    }

//I know this refers to the unique Id of each row but don't know how to 
// chain it with the match selection
console.log($(this).attr('data-row'));

因此,除了显示行外,还可以获取ID并将其行推入新数组,因为在此之后,我必须将该数组与另一个过滤器数组进行匹配,并且仅显示2个数组具有匹配项的行ID。

1 个答案:

答案 0 :(得分:1)

您的代码将tr的列表过滤到data-payment与正则表达式匹配的那些列表。现在,您只需要对结果执行map并提取ID。

此外,您不应该在filter内创建正则表达式,因为它不受每个tr的影响

function filterPay(val) {
  var payApproved = new RegExp(val.map(x => x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).join('|'), 'i');

  // target Rows
  var rows = $(".loading tr").hide().filter(function() {
      // only use test if the reguar expression does not have the global flag set
      return payApproved.test($(this).attr("data-payment"));
  }).fadeIn("fast");
  var ids = rows.get().map(function(row){return row.id});
}