2017-06-15 41 views
2

我想用JQuery创建一个可过滤的表。我的JQuery选择器适用于我的INPUT元素,但不适用于我的SELECT元素,我不明白为什么 - 它们使用相同的逻辑。JQuery Selector对SELECT元素过度挑剔

这里的想法是我们在表格的顶部观察输入过滤字段。一旦我们看到该输入,我们就会选择该列中不包含过滤器字段中键入的数据并将其隐藏的行。

JSFiddle here

function FilterEverything() { 
    $("TR").show(); 
    if ($("#NumbersFilter").val()) { 
    $("input.NumbersData:not([value*='" + $("#NumbersFilter").val() + "' i])").parent().parent().hide(); 
    } 
    if ($("#LettersFilter").val()) { 
    $("input.LettersData:not([value*='" + $("#LettersFilter").val() + "' i])").parent().parent().hide(); 
    } 
    if ($("#ColorsFilter").val()) { 
    $("select.ColorsData:not([value*='" + $("#ColorsFilter").val() + "' i])").parent().parent().hide(); 
    } 
    $("TR.Header").show(); 
}; 
$('#NumbersFilter').bind('input propertychange', function() { 
    FilterEverything(); 
}); 

$('#LettersFilter').bind('input propertychange', function() { 
    FilterEverything(); 
}); 

$('#ColorsFilter').bind('input propertychange', function() { 
    FilterEverything(); 
}); 

为什么输入和选择,而不是仅仅的DIV?

还有其他的jquery语句没有包括在这里看着这些领域的变化和更新数据库。

+1

'select'元素与[[value * ='selector]不匹配,因为它没有值。 '选项'具有价值。 select元素确实允许'.val()'属性获取选定的选项值。 – apokryfos

回答

0

替换

$("select.ColorsData:not([value*='" + $("#ColorsFilter").val() + "' i])").parent().parent().hide(); 

$("select.ColorsData option:checked").not("[value*='" + $("#ColorsFilter").val() + "']").parent().parent().parent().hide(); 

JSFiddler

var colorsFilterValue = $("#ColorsFilter").val(); 
$("select.ColorsData").each(function(i,o) { 
    var v = $(o).val(); 
    if (!v.startsWith(colorsFilterValue)) { 
    $(o).parent().parent().hide(); 
    }  
}); 

JSFiddler

说明:这将迭代嵌套在select元素中的每个选项。

$("select.ColorsData:not([value*=...])") 
+0

感谢您确认我的回答。你能否也赞成我的回答? –