jquery 1.8包含不区分大小写的+开头

时间:2012-09-21 11:16:36

标签: jquery contains case-insensitive startswith

我正在寻找jquerys的插件/扩展:包含不区分大小写的选择器,只匹配以:contains text

开头的单词

如果您输入'count',您将无法获得'帐户'结果

提前致谢

编辑:我最终得到了以下

$.expr.pseudos.Contains = $.expr.createPseudo(function(arg) {
return function(elem) {
  var sentence = $(elem).text().trim().toLowerCase();
  var words = sentence.split(' ');
  arg = arg.toLowerCase();
  var args = arg.split(' ');
  var searchfound = true;

  for(var ix = 0, lx = args.length; ix < lx; ix++) {

    var thisfound = false;

    for(var i = 0, l = words.length; i < l; i++) {
      var wordpos = sentence.indexOf(words[i]);
      var restofsentence = sentence.slice(wordpos, wordpos+args[ix].trim().length);
      if(restofsentence == args[ix].trim() ){             
        thisfound = true;
      }
    }

    if (thisfound == false) {
      searchfound = false;
    }

  }

  return searchfound;  

};
});

它从每个搜索条目的开头搜索,如果有匹配则返回true,无论条目顺序如何。

1 个答案:

答案 0 :(得分:3)

您可以轻松地为此创建自己的伪选择器:

$.expr.pseudos.startsWith = $.expr.createPseudo(function(arg) {
    return function(elem) {
        return $(elem).text().trim().slice(0, arg.length).toLowerCase() == arg.toLowerCase();
    };
});

Demo

要匹配任何单词,您需要按空格分割并迭代集合:

$.expr.pseudos.anyWordStartsWith = $.expr.createPseudo(function(arg) {
    return function(elem) {
        var words = $(elem).text().trim().toLowerCase().split(' ');
        arg = arg.toLowerCase();

        for(var i = 0, l = words.length; i < l; i++) {
            if(words[i].slice(0, arg.length) == arg)
                return true;
        }

        return false;
    };
});

Demo

该函数获取主题元素的内容text(),修剪任何空格,将其转换为小写,以便进行不区分大小写的比较,并将字符串拆分为数组,其中空格被视为列表分隔符("a b c" => ["a", "b", "c"])。

然后将arg(您的搜索词组)转换为小写,也是为了不区分大小写的比较。

它继续迭代单词数组,并将每个单词的子字符串与目标短语进行比较。我使用.slice(0, n)而不是.substring(0, n),因为如果主题字符串的长度小于n个字符,后者会抱怨。

如果找到任何这样的匹配,迭代将立即中断,返回true,否则它将遍历整个集合并到达返回false的最后一行。