2010-10-19 77 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