1

我对 .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"});
        }
    });


});

我想将变量target_cat与 .search一起使用

我不能这样做.search(/target_cat/)

4

3 回答 3

1

如果你想用 的字符串值做一个正则表达式target_cat,那么你可以这样做:

var mySearchTerm = new RegExp(target_cat);

...

if(jQuery(this).attr('data-cats').search(mySearchTerm)  == -1){
于 2013-03-11T10:06:29.460 回答
1

您需要创建RegExp对象并将其传递给search方法

if(jQuery(this).attr('data-cats').search(new RegExp(target_cat)) == -1 )){
...
}
于 2013-03-11T10:08:50.863 回答
1

要将任何内容转换为正则表达式,只需将其放入构造函数中:

var something = "foobar"; var expression = new RegExp(something, 'i');

注意标志的第二个参数。有关构造函数的更多信息,请参见RegExp ,有关事物如何工作的详细信息,请参见正则表达式。

如果您something包含“特殊字符”(例如|, ?, {),则需要转义它们,如果您希望它们按字面意思表示(/foo?/vs. /foo\?/)。这是一个可以为您转义所有相关字符的函数:

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

  • 您正在使用jQuery.live,但应该jQuery.on使用
  • 你在使用.search().match()就足够了
  • jQuery(this).css({"display":"none"});jQuery(this).hide();足够的情况下使用显式
  • 请注意,您jQuery(this)在循环中重复-一个就足够了-变量是您的朋友。
于 2013-03-11T10:18:13.113 回答