复杂的jquery选择器,用于在字符串.split中查找令牌

Complex jquery selector that looks for a token in a string.split

本文关键字:split 字符串 查找 令牌 用于 jquery 选择器 复杂      更新时间:2023-09-26

我有一个html表,其中一列包含带有逗号分隔数据的<span>。我想提出一个jQuery选择器,它返回所有行(最好是<tr>s,但<span>s目前可以使用),其中span标记中的逗号分隔标记<span>之一与提供的字符串匹配。

我从以下内容开始:

$('td.col_8 span:contains("duck")')

这将使我获得包含单词"duck"的特定列中的所有跨度。然而,它也可以匹配<span>fox, mallard-duck</span>。由于"duck"在这段时间内不是唯一的代币,我不希望它包含在比赛中。

有没有办法缩小我的结果集,这样我就只在列分隔列表中包含与特定标记完全匹配的结果?

(我使用的是jQuery 1.2.3)

这就是jQuery表达式的美妙之处。

您可以添加自己的自定义选择器。在这种情况下,我将称之为标签

jQuery.expr[":"].tag = function(elem, index, match, nodeList) {
    var tags = $(elem).text().replace(/(?:' +)?,(?:' +)?/g, ",").split(",");
    return tags.indexOf(match[3]) > -1;
}

这将对照此选择器检查每个先前匹配的元素。首先,它使分隔变平(所以像"firstTag,onotherer,disly,spaced,tag"这样的东西会起作用)。jQuery已经负责解析选择器,并将其作为match传入。match[3]是你感兴趣的。按照下面的用法,match[3]将是"duck"

$('td.col_8 span:tag("duck")')

返回行将根据列表中的标记返回true或false。

我认为这应该做到

$('td.col_8 span').filter(function() { 
    return $(this).text().match(/^duck$/); 
});

现在,您只需要定义所需的regex,或者实现字符串拆分和数组搜索,以返回一个布尔值,指示是否应包括<span>

根据Russ Cam的回答,以下是我的想法:

$('td.col_8 span').filter(function() { 
  return $.inArray('quiet',$(this).html().split(', ')) !== -1;
});

当然,这假设列表总是用,[space]分隔,但它应该适用于我的即时用例。