Javascript 在string.split中查找标记的复杂jquery选择器
我有一个html表,其中一列包含带有逗号分隔数据的Javascript 在string.split中查找标记的复杂jquery选择器,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我有一个html表,其中一列包含带有逗号分隔数据的s。我想提出一个jQuery选择器,它返回所有行(s更好,但是s现在可以使用),其中span标记中的一个逗号分隔标记与提供的字符串匹配 我从以下内容开始: $('td.col_8 span:contains("duck")') 这将使我在包含单词“duck”的特定列中获得所有跨距。然而,它也可以匹配狐狸、野鸭。由于“duck”在这段时间内不是唯一的标记,我不希望它包含在比赛中 有没有办法缩小我的结果集,这样我只包含与列分隔列表中特定标记完全匹配
s。我想提出一个jQuery选择器,它返回所有行(
s更好,但是
s现在可以使用),其中span标记中的一个逗号分隔标记
与提供的字符串匹配
我从以下内容开始:
$('td.col_8 span:contains("duck")')
这将使我在包含单词“duck”的特定列中获得所有跨距。然而,它也可以匹配狐狸、野鸭。由于“duck”在这段时间内不是唯一的标记,我不希望它包含在比赛中
有没有办法缩小我的结果集,这样我只包含与列分隔列表中特定标记完全匹配的结果
(我正在使用jQuery 1.2.3)我认为这应该可以做到
$('td.col_8 span').filter(function() {
return $(this).text().match(/^duck$/);
});
现在,您只需要定义所需的正则表达式,或者实现字符串拆分和数组搜索,以返回一个布尔值,指示是否应包括
。我认为这应该可以做到
$('td.col_8 span').filter(function() {
return $(this).text().match(/^duck$/);
});
现在,您只需要定义所需的正则表达式,或者实现字符串拆分和数组搜索,以返回一个布尔值,指示是否应包含
。这就是jQuery表达式的优点所在
您可以添加自己的自定义选择器。在这种情况下,我将称之为标签
jQuery.expr[":"].tag = function(elem, index, match, nodeList) {
var tags = $(elem).text().replace(/(?:\ +)?,(?:\ +)?/g, ",").split(",");
return tags.indexOf(match[3]) > -1;
}
这将根据该选择器检查每个先前匹配的元素。首先,它会使分离变平(所以像“firstTag,onother,bally,spaced,tag”这样的东西会起作用)。jQuery已经负责解析选择器并将其作为匹配项传入。匹配[3]是您感兴趣的。使用以下用法时,匹配项[3]将为“duck”
$('td.col_8 span:tag("duck")')
返回行将根据列表中的标记返回true或false。这就是jQuery表达式的优点所在 您可以添加自己的自定义选择器。在这种情况下,我将称之为标签
jQuery.expr[":"].tag = function(elem, index, match, nodeList) {
var tags = $(elem).text().replace(/(?:\ +)?,(?:\ +)?/g, ",").split(",");
return tags.indexOf(match[3]) > -1;
}
这将根据该选择器检查每个先前匹配的元素。首先,它会使分离变平(所以像“firstTag,onother,bally,spaced,tag”这样的东西会起作用)。jQuery已经负责解析选择器并将其作为匹配项传入。匹配[3]是您感兴趣的。使用以下用法时,匹配项[3]将为“duck”
$('td.col_8 span:tag("duck")')
根据列表中的标记,返回行将返回true或false。接下来是我的想法:
$('td.col_8 span').filter(function() {
return $.inArray('quiet',$(this).html().split(', ')) !== -1;
});
当然,这假设列表总是用,[space]
分隔,但它应该适用于我的即时用例。接下来,我想到了以下几点:
$('td.col_8 span').filter(function() {
return $.inArray('quiet',$(this).html().split(', ')) !== -1;
});
当然,这假设列表总是用
,[space]
分隔,但它应该适用于我的即时用例。Ah,.filter
。我想这正是我需要的。如果我不使用正则表达式,我想我仍然可以分割字符串并测试数组元素中的相等性。谢谢看起来只有当duck是span中唯一的关键字时,这才有效。请注意,使用/^duck$/.test($(this).text())
更有效一些。@James-没错。这只是一个演示,展示了如何做到这一点。我将让Ben来完成他需要的正则表达式或字符串拆分/数组搜索实现。啊,.filter
。我想这正是我需要的。如果我不使用正则表达式,我想我仍然可以分割字符串并测试数组元素中的相等性。谢谢看起来只有当duck是span中唯一的关键字时,这才有效。请注意,使用/^duck$/.test($(this).text())
更有效一些。@James-没错。这只是一个演示,展示了如何做到这一点。我将让Ben来设计他需要的正则表达式或字符串拆分/数组搜索实现。这真的很酷。有一些严肃的正则表达式在里面进行:-),其实很简单。(?:)是不匹配的组。\+是任意数量的空格。那么(?:\+)?为零个或多个空格,不匹配。因此,这会删除逗号周围的空格,但会在标记中单独留下空格。感谢您的解释!当你把它分解成那样的时候,就没那么糟糕了。我很容易被正则表达式吓倒,因为我仍然不知道所有的角色都是什么意思,只是看着它。这真的很酷。有一些严肃的正则表达式在里面进行:-),其实很简单。(?:)是不匹配的组。\+是任意数量的空格。那么(?:\+)?为零个或多个空格,不匹配。因此,这会删除逗号周围的空格,但会在标记中单独留下空格。感谢您的解释!当你把它分解成那样的时候,就没那么糟糕了。我很容易被正则表达式吓倒,因为我仍然不知道所有的字符仅仅通过看它是什么意思。