Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在string.split中查找标记的复杂jquery选择器_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

Javascript 在string.split中查找标记的复杂jquery选择器

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”在这段时间内不是唯一的标记,我不希望它包含在比赛中 有没有办法缩小我的结果集,这样我只包含与列分隔列表中特定标记完全匹配

我有一个html表,其中一列包含带有逗号分隔数据的
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来设计他需要的正则表达式或字符串拆分/数组搜索实现。这真的很酷。有一些严肃的正则表达式在里面进行:-),其实很简单。(?:)是不匹配的组。\+是任意数量的空格。那么(?:\+)?为零个或多个空格,不匹配。因此,这会删除逗号周围的空格,但会在标记中单独留下空格。感谢您的解释!当你把它分解成那样的时候,就没那么糟糕了。我很容易被正则表达式吓倒,因为我仍然不知道所有的角色都是什么意思,只是看着它。这真的很酷。有一些严肃的正则表达式在里面进行:-),其实很简单。(?:)是不匹配的组。\+是任意数量的空格。那么(?:\+)?为零个或多个空格,不匹配。因此,这会删除逗号周围的空格,但会在标记中单独留下空格。感谢您的解释!当你把它分解成那样的时候,就没那么糟糕了。我很容易被正则表达式吓倒,因为我仍然不知道所有的字符仅仅通过看它是什么意思。