0

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

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

为了尝试以不同的方式进行解释,我有一个带有“包含”复选框的表格。然后我有一个子表,它可以包含主表中的一个项目,但仅当包含主表中的该选项时。

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

4

3 回答 3

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/

您也可以通过将数据属性添加到复选框和选择字段来实现相同的目的,从而使按文本搜索(这可能非常不准确)变得多余。我选择向您展示上面的示例,因为您的 HTML 似乎是由某些东西生成的,我不知道您对它有多少控制权。

于 2013-11-14T20:13:42.527 回答
0

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

感谢大家的帮助。

于 2013-11-14T10:54:29.133 回答
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!");
        }
    }
}
于 2013-11-13T15:54:27.340 回答