JS问题有下拉菜单和状态选择

时间:2017-06-13 03:17:15

标签: javascript jquery

这是小提琴:https://jsfiddle.net/6aevjxkx/38/

在下拉菜单中,如果您选择内布拉斯加州,您将看到华盛顿州的学校位置,该位置不应出现。

我认为问题是脚本正在搜索整个td部分以查找任何匹配的状态初始值。对于来自华盛顿的学校,它在地址中有“NE”,当你从下拉列表中选择内布拉斯加州时会出现它。

话虽如此,如何更新脚本以便它只能搜索div中具有类“state”的匹配状态?或者,如果有另一种解决方案,我的耳朵是敞开的。

提前致谢!

脚本代码

$('select#stateCollege').change( function(e) { 
   var letter = $(this).val();
     if (letter === 'ALL') {
         $ ('table.event tr').css('display','inline-block');
     } else {
         $('table.event tr').each( function(rowIdx,tr) {
             $(this).hide().find('td').each( function(idx, td) {
                 if( idx === 0 || idx === 1) {
                     var check = $(this).text();
                     if (check && check.indexOf(letter) > 0) {
                        $(this).parent().css('display','inline-block');
                    } 
                 }
       });             
    });
   }             
});

1 个答案:

答案 0 :(得分:1)

以下作品:

$('table.event tr').each(function(rowIdx, tr) {
    var row = $(this).hide();
    var state = row.find('.state').text().trim();
    if (state === letter)
        row.css('display', 'inline-block');
});

更新了演示:https://jsfiddle.net/6aevjxkx/42/

也就是说,隐藏当前行,然后找到.text()元素的.state.trim(),而不是.indexOf()只使用===比较相当容易混淆的letter变量中的值。

请注意,在.each()元素上使用td是没有意义的,因为每行只有一个td