我有一个html表,其中一列包含带有逗号分隔数据的<span>
。我想提出一个返回所有行的jQuery选择器(<tr>
s更可取,但<span>
s现在可用),其中一个以逗号分隔的标记{{1} span标记中的}与提供的字符串匹配。
我从以下内容开始:
<span>
这将使我在包含单词'duck'的特定列中的所有跨度。但是,它也可以匹配$('td.col_8 span:contains("duck")')
。由于'duck'在该范围内不是唯一的标记,我不希望包含在匹配中。
有没有办法缩小我的结果集,所以我只包含与列分隔列表中的特定标记完全匹配的结果?
(我正在使用jQuery 1.2.3)
答案 0 :(得分: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,badly,spaced,tag”这样的东西会起作用)。 jQuery已经负责解析选择器并将其作为匹配传递。匹配[3]是你感兴趣的。通过以下用法匹配[3]将是'duck'
$('td.col_8 span:tag("duck")')
返回行将根据列表中的标记返回true。
答案 1 :(得分:2)
我认为应该这样做
$('td.col_8 span').filter(function() {
return $(this).text().match(/^duck$/);
});
现在您只需要定义所需的正则表达式,或者实现字符串拆分和数组搜索以返回布尔值,以指示是否应包含<span>
。
答案 2 :(得分:0)
离开Russ Cam's answer,这就是我想出的:
$('td.col_8 span').filter(function() {
return $.inArray('quiet',$(this).html().split(', ')) !== -1;
});
当然,这假设列表将始终与,[space]
分隔,但它应该适用于我的直接用例。