如何检查html是否有任何html元素包含来自某个Object的文本

时间:2017-01-04 09:20:34

标签: javascript jquery

我有一些标签和价值的对象。这些元素包含一些数据。 现在我想循环html元素并检查,哪些元素匹配这些元素。对象称为ui。

enter image description here

现在我想选择包含任何对象元素的文本的所有元素。 这些元素有类.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]。

感谢您的建议。

2 个答案:

答案 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);
     }
 });

https://jsfiddle.net/3o1oy5y2/

编辑:我看到了你的代码,我认为我的代码仍然有用。尝试一下,你可以看到我使用下划线库来创建一个字符串seperatad来自数组