2013-03-11 107 views
0

我有.searchJavaScript正則表達式.search

這一點的問題是代碼

// filter - posts 
jQuery('.filter_by').live('click',function(){ 
    var target_fi = jQuery(this); 
    var target_cat = target_fi.parents('.cat').children('.namechanger').val(); 
    target_fi.next().fadeIn(100); 


    var cat_all = target_fi.prev().find("option").each(function(i){ 
     if(jQuery(this).attr('data-cats').search(target_cat) == -1){ 
      jQuery(this).css({"display":"none"}); 
     } 
    }); 


}); 

我想與.search

我做不到使用變量target_cat.search(/target_cat/)

+1

嘗試'new RegExp(target_cat)' – 2013-03-11 10:06:09

回答

1

如果你想從target_cat的字符串值中產生一個正則表達式,那麼你可以這樣做:

var mySearchTerm = new RegExp(target_cat); 

... 

if(jQuery(this).attr('data-cats').search(mySearchTerm) == -1){ 
+0

這是沒有必要爲此聲明一個新的變量。 – Amberlamps 2013-03-11 10:07:26

+0

@Amberlamps我想,但它強調了它是如何完成的。 – Xophmeister 2013-03-11 10:08:20

1

您需要創建RegExp對象,並傳遞到search方法

if(jQuery(this).attr('data-cats').search(new RegExp(target_cat)) == -1)){ 
... 
} 
1

什麼轉換成正則表達式,只需將其拖放到構造函數:

VAR東西= 「FOOBAR」; var expression = new RegExp(something,'i');

請注意標誌的第二個參數。有關構造函數的更多信息,請參見RegExp,有關事物如何工作的詳細信息,請參見Regular Expressions

如果something包含「特殊字符」(如|?{),你需要逃避他們,如果你希望它們字面上的意思(/foo?//foo\?/)。下面是會esacpe所有相關的字符爲你的函數:

function escapeRegEx(string) { 
    return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); 
} 

  • 您使用jQuery.live,但應該使用jQuery.on代替
  • 您正在使用.search().match()足夠
  • 你是使用明確jQuery(this).css({"display":"none"});jQuery(this).hide();足夠
  • 請注意,你是repeati在你的循環中ng jQuery(this) - 一個應該就夠了 - 變量是你的朋友。
+0

爲jQuery最佳做法+1 – Xophmeister 2013-03-11 11:00:37