您好我正在尝试将两个数组相互比较,然后在任何值匹配时隐藏列表元素。
一个数组是附加到列表项的标记,另一个是用户输入。
我遇到了麻烦,因为我似乎能够交叉引用一个用户输入工作,并且无法针对多个标签获得多个单词。
用户输入字词数量可能会发生变化,标签数量可能会发生变化。我试过inArray
但没有运气。任何帮助将非常感激。请参阅以下代码:
function query_searchvar() {
var searchquery=document.navsform.query.value.toLowerCase();
if (searchquery == '') {
alert("No Text Entered");
}
var snospace = searchquery.replace(/\s+/g, ',');
event.preventDefault();
var snospacearray = snospace.split(',');
$('li').each(function() {
var searchtags = $(this).attr('data-searchtags');
//alert(searchtags);
var searcharray = searchtags.split(',');
//alert(searcharray);
var searchtrue=-1;
for(var i = 0, len = searcharray.length; i < len; i++){
if(searcharray[i] == searchquery){
searchtrue = 0;
break;
}
}
if (searchtrue == 0) {
$(this).show("normal");
}
else {
$(this).hide("normal");
}
});
}
好的,我已经尝试过实施下面的代码,但没有运气。它似乎无法检查两个阵列。
function query_searchvar()
{
var searchquery=document.navsform.query.value.toLowerCase();
if(searchquery == '')
{alert("No Text Entered");
}
var snospace = searchquery.replace(/\s+/g, ' ');
event.preventDefault();
var snospacearray = snospace.split(' ');
alert(snospacearray[1]);
$('li').each(function() {
var searchtags = $(this).attr('data-searchtags');
alert(searchtags);
var searcharray = searchtags.split(' ');
alert(searcharray[0]);
jQuery.each(snospacearray, function(key1,val1){
jQuery.each(searcharray,function(key2,val2){
if(val1 !== val2) {$(this).hide('slow');}
});
});
});
}
工作代码:
function query_searchvar()
{
var searchquery=document.navsform.query.value.toLowerCase();
if(searchquery == '')
{alert("No Text Entered");
}
var queryarray = searchquery.split(/,|\s+/);
event.preventDefault();
$('li').each(function() {
var searchtags = $(this).attr('data-searchtags');
//alert(searchtags);
var searcharray = searchtags.split(',');
//alert(searcharray);
var found = false;
for (var i=0; i<searcharray.length; i++)
if ($.inArray(searcharray[i], queryarray)>-1) {
found = true;
break;
}
if (found == true )
{
$(this).show("normal");
}
else {
$(this).hide("normal");
}
});
}
答案 0 :(得分:1)
var snospace = searchquery.replace(/\s+/g, ',');
var snospacearray = snospace.split(',');
请注意,您可以拆分正则表达式,因此上述内容将等于:
var queryarray = searchquery.split(/,|\s+/);
要查找两个数组中是否包含项目,请使用以下代码:
var found = searcharray.some(function(tag) {
return queryarray.indexOf(tag) > -1;
});
虽然这只适用于符合ES5标准的浏览器:-)要支持其他浏览器,请使用
var found = false;
for (var i=0; i<searcharray.length; i++)
if ($.inArray(searcharray[i], queryarray)>-1) {
found = true;
break;
}
在普通的js中,没有jQuery.inArray
:
var found = false;
outerloop: for (var i=0; i<searcharray.length; i++)
for (var j=0; j<queryarray.length; j++)
if (searcharray[i] == queryarray[j]) {
found = true;
break outerloop;
}
一个更快的算法(只有真正大型数组才需要)将两个数组排序,然后才能线性运行。
答案 1 :(得分:0)
这是应该解决问题的伪代码。
get both arrays
for each item in array 1
for each element in array 2
check if its equal to current element in array 1
if its equal to then hide what you want
这个代码的一个例子是
jQuery.each(array1, function(key1,val1){
jQuery.each(array2,function(key2,val2){
if(val1 == val2) {$(your element to hide).hide();}
});
});
如果您有任何不明白的地方,请询问:)