我正在寻找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,无论条目顺序如何。
答案 0 :(得分: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
个字符,后者会抱怨。
如果找到任何这样的匹配,迭代将立即中断,返回true,否则它将遍历整个集合并到达返回false的最后一行。