.javascript中的测试未按预期工作
我已经创建了一个自定义选择菜单的小插件。我必须在下拉列表中实现搜索功能。然而,我添加了功能,但有时它没有给出正确的结果,例如。如果您在输入框中键入“a”,则它应显示如下所示的结果 但我的插件给出了下面的结果。它还将大写字母替换为小写字母。 我正试图解决这个问题,但没有任何想法来解决它.javascript中的测试未按预期工作,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我已经创建了一个自定义选择菜单的小插件。我必须在下拉列表中实现搜索功能。然而,我添加了功能,但有时它没有给出正确的结果,例如。如果您在输入框中键入“a”,则它应显示如下所示的结果 但我的插件给出了下面的结果。它还将大写字母替换为小写字母。 我正试图解决这个问题,但没有任何想法来解决它 这解决了部分问题小写字母加上无用的高光跨度: 这解决了部分问题小写字母加上无用的高光跨度: 不匹配项的问题在于,对多个元素使用同一个RegExp对象的测试方法 但将移动每个匹配的起始位置,以便在同一字符串上匹配后续
这解决了部分问题小写字母加上无用的高光跨度:
这解决了部分问题小写字母加上无用的高光跨度:
不匹配项的问题在于,对多个元素使用同一个RegExp对象的测试方法 但将移动每个匹配的起始位置,以便在同一字符串上匹配后续匹配 因此,您应该为每个元素创建一个新的RegExp对象。或者使用。匹配并检查其长度 要将字符替换为您输入的字符,请使用匹配的文本而不是用户提交的文本,您需要在RegExp中创建一个组,并使用该捕获替换匹配
highlight: function (val) {
var nn = new RegExp('(' + (val||'^$') + ')', 'gi');
var txt = $(this).find('label').text();
txt = txt.replace(nn, "<span class='highlight'>$1</span>");
$('label', this).html(txt)
}
最后,在创建选项时需要重置li变量
演示在不匹配项的问题是,您对多个元素使用同一个RegExp对象的测试方法 但将移动每个匹配的起始位置,以便在同一字符串上匹配后续匹配 因此,您应该为每个元素创建一个新的RegExp对象。或者使用。匹配并检查其长度 要将字符替换为您输入的字符,请使用匹配的文本而不是用户提交的文本,您需要在RegExp中创建一个组,并使用该捕获替换匹配
highlight: function (val) {
var nn = new RegExp('(' + (val||'^$') + ')', 'gi');
var txt = $(this).find('label').text();
txt = txt.replace(nn, "<span class='highlight'>$1</span>");
$('label', this).html(txt)
}
最后,在创建选项时需要重置li变量
在演示时,您在使用g标志创建的同一正则表达式上重复调用该方法。当您这样做时,后续的.测试将从开始继续。以下是字符串a的匹配过程: 匹配测试返回位置的lastIndex字符串子字符串 ----- -------- --------- ------- ---- 0沃尔沃虚假 0萨博真正的萨博2 3沃尔沃lvo错误 0萨博真正的萨博2 3梅赛德斯-塞德斯假 0奥迪真实1 2所有常驻人员均为假常驻人员 0所有商业所有商业真实1
这就解释了为什么不显示所有常驻标头。解决方案是删除g标志,因为您只想测试每个字符串一次。您在使用g标志创建的同一正则表达式上重复调用该方法。当您这样做时,后续的.测试将从开始继续。以下是字符串a的匹配过程: 匹配测试返回位置的lastIndex字符串子字符串 ----- -------- --------- ------- ---- 0沃尔沃虚假 0萨博真正的萨博2 3沃尔沃lvo错误 0萨博真正的萨博2 3梅赛德斯-塞德斯假 0奥迪真实1 2所有常驻人员均为假常驻人员 0所有商业所有商业真实1
这就解释了为什么不显示所有常驻标头。解决方案是删除g标志,因为您只想测试每个字符串一次。如果您不介意修复代码中的键入错误并将其缩进:您希望使用匹配的文本,而不是键入的值。如果您不介意修复代码中的键入错误并将其缩进:您希望使用匹配的文本,而不是键入的值。谢谢,我认为这是我见过的答案的最好解释,我认为这是我见过的答案的最好解释
searchItem: function () {
var patt = new RegExp(this.value, 'gi')
var val = this.value;
$('#options li').each(function () {
var nMatch= $(this).text().match(patt);
if(nMatch){
$(this).show();
apply.highlight.call(this, val)
}
else{
$(this).hide();
}
})
$('#options h2').each(function () {
var nMatch= $('label', this).text().match(patt);
if(nMatch){
$(this).show();
apply.highlight.call(this, val)
}
else{
$(this).hide();
}
})
}
searchItem: function () {
var pattValue = this.value;
var val = this.value;
$('#options li').each(function () {
var patt = new RegExp(pattValue, 'gi');
if (!patt.test($(this).text())) {
$(this).hide();
} else {
$(this).show();
apply.highlight.call(this, val);
}
});
$('#options h2').each(function () {
var patt = new RegExp(pattValue, 'gi');
if (!patt.test($('label', this).text())) {
$(this).hide();
} else {
$(this).show();
apply.highlight.call(this, val);
}
});
}
highlight: function (val) {
var nn = new RegExp('(' + (val||'^$') + ')', 'gi');
var txt = $(this).find('label').text();
txt = txt.replace(nn, "<span class='highlight'>$1</span>");
$('label', this).html(txt)
}