我有一个函数:
- 过滤 tr 行
- 根据传递到函数中的值创建经过批准的正则表达式
- 创建一个
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 并将它们的行插入一个新数组中,因为在此之后我必须将该数组与另一个过滤器数组匹配,并且只显示两个数组匹配的行id。
最佳答案
您的代码将 tr
列表过滤为 data- payment
与正则表达式匹配的列表。您现在只需对结果进行映射
并提取 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});
}
关于javascript - 获取与正则表达式与数据属性匹配的行的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157795/