如何检查第二个项目循环中是否选择了循环的当前项?

时间:2013-11-13 15:37:07

标签: jquery html jquery-selectors each

我有一个jQuery循环,它检查循环中的当前项目与另一个项目列表 - 如果匹配,我需要清除循环中当前项目的值。

$('.subDDL').each(function () {
    var $this = $(this);
    if ($this.val() == ****second loop id's here**** ) {
        //Do something
    }
    else {
        //Do something else.
    }
})

为了尝试解释一下,我有一个带有“include”复选框的表。然后我有一个子表,它可以包含主表中的一个项目,但只包括主表中的那个选项。

因此,当我遍历子表项时,我需要转到主表并检查包含的选项。如果主表中包含 not 的任何子值,我需要将当前子项的值设置为“None”,基本上删除不允许的值。

3 个答案:

答案 0 :(得分:1)

如果我找到你的话,这就是你需要的:

var checkboxes = $(".cbx");
var selects = $('.subDDL');

function sanitizeSelectMenus($el) {

  selects.each(function (i, v) {
    var $v = $(v);
    var current = $v.find(":selected");
    var forbidden = !! $el ? $el.parents("td").next() : checkboxes.filter(":not(:checked)").parents("td").next();
    $.each(forbidden, function (i, v) {
        if (current.text() == $(v).text()) {
            current.removeAttr("selected");
            $($v.children()[0]).attr("selected", "selected");
        }
    });
  });
}

checkboxes.on("click", function (e) {
  var $el = $(e.target);
  if ($el.is(":not(:checked)")) {
    sanitizeSelectMenus($el);
  }
});

selects.on("change", function () {
  sanitizeSelectMenus();
});

http://jsfiddle.net/JVf8F/6/

您也可以通过在复选框和选择字段中添加data-attributes来实现相同目的,从而使按文本搜索(可能非常不准确)是多余的。我选择向您展示上面的示例,因为看起来您的HTML是由某些东西生成的,我不知道您对它有多少控制权。

答案 1 :(得分:0)

我不确定这是否会有所帮助,因为这个问题有点不清楚(对我而言)。以下是如何使用嵌套循环来比较项目:

for(var i = 0; i < table1.length; i++) {
    for(var j = 0; j < table2.length; j++) {
        if(table1Items[i].value == table2Items[j].value) {
            alert("Match!");
        }
    }
}

答案 2 :(得分:0)

所以,最后我用一个数组来检查...... 当我循环遍历主表中的行时(在我到达子表之前),我创建了一个数组并将每个未检查的行推入该数组。我在if语句中需要做的只是($.inArray(DsID[0], DsAry) >= 0),这意味着如果子行值出现在数组中,我需要删除它。

感谢大家的帮助。