我有一个jQuery循环,它检查循环中的当前项目与另一个项目列表 - 如果匹配,我需要清除循环中当前项目的值。
$('.subDDL').each(function () {
var $this = $(this);
if ($this.val() == ****second loop id's here**** ) {
//Do something
}
else {
//Do something else.
}
})
为了尝试解释一下,我有一个带有“include”复选框的表。然后我有一个子表,它可以包含主表中的一个项目,但只包括主表中的那个选项。
因此,当我遍历子表项时,我需要转到主表并检查包含的选项。如果主表中包含 not 的任何子值,我需要将当前子项的值设置为“None”,基本上删除不允许的值。
答案 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();
});
您也可以通过在复选框和选择字段中添加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)
,这意味着如果子行值出现在数组中,我需要删除它。
感谢大家的帮助。