Javascript jQuery.filter()对具有单个元素的集合的作用不同

Javascript jQuery.filter()对具有单个元素的集合的作用不同,javascript,jquery,html,Javascript,Jquery,Html,我发现了一些非常奇怪的过滤函数的行为,我无法计算出来 我有一个在自定义数据过滤器属性中具有特定文本的表行列表。用户在文本框中键入文本,页面将根据数据过滤器属性中的内容,使用jQuery自动过滤表行: $('tbody > tr').hide(); var validTextElements = findMatchingTextRows($('tbody > tr')); validTextElements.show(); function findMatchingTextRows

我发现了一些非常奇怪的过滤函数的行为,我无法计算出来

我有一个在自定义数据过滤器属性中具有特定文本的表行列表。用户在文本框中键入文本,页面将根据数据过滤器属性中的内容,使用jQuery自动过滤表行:

$('tbody > tr').hide();

var validTextElements = findMatchingTextRows($('tbody > tr'));
validTextElements.show();

function findMatchingTextRows(elements) {

    var textFilterInput = $('#tb_text_filter').val();
    textFilterInput = textFilterInput.toLowerCase();

    return elements.filter('tr[data-filter*=\'' + textFilterInput + '\']');
}
除非我有一张一排的桌子,否则一切都很好。在这种情况下,即使用户输入一个空字符串(在这种情况下,我希望没有过滤,列表保持不变),
elements.filter('tr[data filter*=\''+-textFilterInput+'\']')
返回一个空列表,但当
elements
中有多个项目时,用户输入一个空字符串,名单保持不变

单个元素和多个元素之间似乎没有区别,如果我让它处理多个元素,那么我在Chrome developer tools中删除HTML中除一个之外的所有元素,它将停止工作


为什么会发生这种情况?

我怀疑您对“attribute contains”选择器的行为的解释会引起一些混淆。如果提供的值为空字符串,则不匹配任何内容

相关章节对选择器进行了如下定义:

表示具有att属性的元素,其值至少包含>子字符串“val”的一个实例。如果“val”是空字符串,则>选择器不表示任何内容

JQuery的filter函数将匹配的元素过滤为与选择器匹配的元素:

将匹配的元素集减少为与选择器匹配或通过函数测试的元素集

在您的例子中,这不是它们中的任何一个,因此filter函数返回一个空jQuery对象。空字符串应该过滤掉所有行,而不是像您所期望的那样保留未过滤的行


很难准确猜测您的原始代码中到底发生了什么,但我怀疑有什么东西抛出了错误,当字符串为空时,过滤根本不会发生。如果您能够复制确切的问题,请更新您的小提琴,我将看看是否可以进一步提供帮助。

我怀疑您对“属性包含”选择器行为的解释可能会引起一些混淆。如果提供的值为空字符串,则不匹配任何内容

相关章节对选择器进行了如下定义:

表示具有att属性的元素,其值至少包含>子字符串“val”的一个实例。如果“val”是空字符串,则>选择器不表示任何内容

JQuery的filter函数将匹配的元素过滤为与选择器匹配的元素:

将匹配的元素集减少为与选择器匹配或通过函数测试的元素集

在您的例子中,这不是它们中的任何一个,因此filter函数返回一个空jQuery对象。空字符串应该过滤掉所有行,而不是像您所期望的那样保留未过滤的行


很难准确猜测您的原始代码中到底发生了什么,但我怀疑有什么东西抛出了错误,当字符串为空时,过滤根本不会发生。如果您能够复制准确的问题,请更新您的fiddle,我会看看是否可以进一步提供帮助。

我应该添加我使用的是jquery-1.7.1是否可以为您的代码添加一个fiddle?我可以近似它,但遗憾的是它没有复制准确的行为。使用空字符串时,它甚至会过滤掉多行,而在我的系统中,多行不会使用空字符串过滤掉。我应该补充一点,我使用的是jquery-1.7.1,您是否可以为您的代码添加一个提琴?我可以近似它,但不幸的是,它没有复制准确的行为。使用空字符串时,它甚至会过滤掉多行,而在我的系统中,多行不会使用空字符串过滤掉。