2010-10-19 93 views
1

我有一个内联弹出窗口,它显示了每个单独的跨度元素中的复选框和相关标签列表。我想添加一个文本框,用户可以在其中输入以过滤弹出窗口中的值(用户名)。我有以下代码扩展jQuery属性选择器

$("#toEmpFilter").live("change", function() { 

      var FilterVal = $(this).val(); 
      $("input.boxes").not("[title*=" + FilterVal + "]").each(function() { 
       $(this).parent("span.clscheck").hide(); 
      }); 
      $("input.boxes[title*=" + FilterVal + "]").each(function() { 
       $(this).parent("span.clscheck").show(); 
      }); 

     }); 

标签值被复制到标题字段中。这段代码工作正常。它唯一的问题是title * = FilterVal使大小写敏感的比较,而我需要不区分大小写的比较。我已经做了谷歌上一段时间,但只能找到扩展:如关键字扩展,而不是* =或$ =运营商 问候

回答

1

您可以将一个函数传递给.not(),并对两端的情况进行规范化处理。

var FilterVal = $(this).val().toLowerCase(); // change to lower case 

$("input.boxes").not(function() { 
      // change title to lower case and compare 
     return this.title.toLowerCase().indexOf(FilterVal) > -1; 
}).each(function() { 
    $(this).parent("span.clscheck").hide(); 
}); 

编辑:没有注意到,你是不是做一个精确的比较。固定要复制的属性包含的比较。

而且你可以缩短你的代码是这样的:

$("#toEmpFilter").live("change", function() { 
     var FilterVal = $(this).val().toLowerCase(); 

     $("input.boxes").each(function() { 
      $(this).parent("span.clscheck") 
        .toggle(this.title.toLowerCase().indexOf(FilterVal) > -1); 
     }); 
    }); 

这样你只选择一次的元素。

0

使用

var FilterVal = $(this).val().toLowerCase() 

然后FilterVal总是支持小写。

假设标题*也总是小写。

+0

我恐怕这个假设是不正确的:( – 2010-10-19 12:24:45