jquery 1.8包含不区分大小写的+;开始于

jquery 1.8包含不区分大小写的+;开始于,jquery,contains,case-insensitive,startswith,Jquery,Contains,Case Insensitive,Startswith,我正在寻找jquerys:contains选择器的插件/扩展,它不区分大小写,只匹配以:contains text开头的单词 这样,如果您键入“count”,您将不会得到“account”结果 提前谢谢 编辑:我最终得出以下结论 $.expr.pseudos.Contains = $.expr.createPseudo(function(arg) { return function(elem) { var sentence = $(elem).text().trim().toLowerCas

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

这样,如果您键入“count”,您将不会得到“account”结果

提前谢谢

编辑:我最终得出以下结论

$.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;  

};
});
$.expr.pseudos.Contains=$.expr.createPseudo(函数(arg){
返回函数(elem){
var语句=$(elem.text().trim().toLowerCase();
变量词=句子分割(“”);
arg=arg.toLowerCase();
变量args=参数拆分(“”);
var searchfound=true;
for(var ix=0,lx=args.length;ix

它从每个搜索条目的开头开始搜索,如果存在匹配项,则返回true,而不考虑条目顺序。

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

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

要匹配任何单词,您需要按空格拆分它们并在集合中迭代:

$.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;
    };
});
$.expr.pseudos.anyWordStartsWith=$.expr.createPseudo(函数(arg){
返回函数(elem){
var words=$(elem.text().trim().toLowerCase().split(“”);
arg=arg.toLowerCase();
for(var i=0,l=words.length;i

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

然后,它将搜索短语
arg
转换为小写,这也是为了进行不区分大小写的比较

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


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

@JoeFletch我正在寻找一个搜索函数,搜索人员及其职业的列表这几乎就是我要寻找的-但这只查找第一个单词-可以修改为在选择器中查找每个单词吗?:)我只懂一半-但它像一个魅力-非常感谢:D@afcdesign:很高兴你喜欢它,我按指令说明添加了一条指令。不过有一个小问题——我有一个名字:“Alex Qin”,如果我搜索“Alex”或“Qin”,他会出现在结果中——但如果我键入“Alex Qin”,他不会显示——这怎么纠正呢?@afcdesign:当然,这是因为我们现在搜索的是每个单词,而不是
“Alex”
“Qin”
以输入的
“Alex Qin
”开始。您必须执行第一个代码段的全文搜索和第二个代码段的逐字搜索。我相信你能想出如何将它们组合成一个函数。