【问题标题】:jquery 1.8 contains case insensitive + starts withjquery 1.8 包含不区分大小写的 + 开头
【发布时间】:2012-09-13 19:28:00
【问题描述】:

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

这样,如果您输入“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;  

};
});

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

【问题讨论】:

  • @JoeFletch 我正在寻找一个搜索功能来搜索人员及其职业列表

标签: jquery contains case-insensitive startswith


【解决方案1】:

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

$.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(),修剪任何空格,将其转换为小写,以便不区分大小写比较,并将字符串拆分为数组,其中空格被视为列表分隔符(@ 987654326@).

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

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

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

【讨论】:

  • 这几乎就是我要找的——但这只是寻找第一个词——可以修改它来寻找选择器中的每个词吗? :)
  • 我只了解了一半 - 但它就像一个魅力 - 非常感谢:D
  • @afcdesign:很高兴你喜欢它,我添加了逐条指令的描述。
  • 一个小问题 - 我有一个名字:'Alex Qin',如果我搜索 'Alex' 或 'Qin',他会出现在结果中 - 但如果我输入 'Alex Qin' 他不会显示 - 如何纠正?
  • @afcdesign:当然,这是因为我们现在正在搜索每个单独的单词,"Alex""Qin" 都不是以您的输入 "Alex Qin" 开头的。您必须执行 第一个 sn-p 的全文搜索和第二个 sn-p 的逐字搜索。我相信您可以弄清楚如何将它们组合成一个函数。
猜你喜欢
  • 2011-10-20
  • 2011-01-12
  • 2014-08-04
  • 2012-02-18
  • 2023-04-02
  • 2012-09-06
  • 2012-07-29
相关资源
最近更新 更多