我有一些标签和价值的对象。这些元素包含一些数据。 现在我想循环html元素并检查,哪些元素匹配这些元素。对象称为ui。
现在我想选择包含任何对象元素的文本的所有元素。 这些元素有类.img。 下面简单的javascript:
$("#project").autocomplete({
source: Items,
appendTo: ".autocomplete",
minLength: 2,
response: function (event, ui) {
if (ui.content.length == 0) {
return false;
}
var content = ui.content[0].label;
$.each($('.img'), function () {
if ($(this).is(':contains(' + content + ')')) {
return;
} else {
$(this).fadeOut(100);
}
});
}
});
此代码充当自动完成,我想隐藏所有与ui对象中的数据不匹配的emelent。 这段代码对我来说几乎没问题,但是有一件事情会破坏:
var content = ui.content[0].label;
这只从对象中选择第一项,我正在寻找一种方法,如何从obejct检查所有项目以检查文本是否包含数据,而不仅仅是来自第一个obejct元素[0]。
感谢您的建议。
答案 0 :(得分:0)
您可以在$ each回调中添加一个循环:
$.each($('.img'), function() {
for (var i = 0; i < ui.content.length; i++) {
var content = ui.content[i].label;
...
}
});
编辑:将let更改为var
答案 1 :(得分:0)
我为你创建了一个jsfiddle,如果我理解了这个问题
var matchLabelString=_.reduce(ui,function(accumulateString,current){
if(accumulateString == ""){
return current.label;
}
return accumulateString + "|"+current.label;
},"")
var regex = new RegExp("^"+matchLabelString);
$.each($('.img'), function () {
if (regex.test($(this).text())) {
return;
} else {
$(this).fadeOut(100);
}
});
编辑:我看到了你的代码,我认为我的代码仍然有用。尝试一下,你可以看到我使用下划线库来创建一个字符串seperatad来自数组