2

我正在寻找 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,而不管条目顺序如何。

4

1 回答 1

3

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

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

演示

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

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

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

If any such match is found, the iteration will break immediately, returning true, otherwise it will iterate over the entire collection and reach the last line where it returns false.

于 2012-09-21T11:26:26.587 回答