我有两个数组。
第一个数组(idContainerArray)
包含我在页面中选中的复选框的ID。
第二个数组(idArray)
将包含当前页面复选框的ID。
我想比较这两个数组,如果找到匹配项,请检查当前页面上的相应复选框。
以下代码执行时没有错误,但不会检查框。
jquery:
var idArray = [];
var idContainerArray = [];
$.each(idArray, function (i, el) {
if ($.inArray(el, idContainerArray) != -1) {
$(el).prop("checked", true);
}
});
答案 0 :(得分:3)
你没有正确选择DOM元素。 el
应为'#' + el
:
$("#" + el).prop("checked", true);
修改强>
感谢@Blender,document.getElementById(el).checked = true
似乎不那么迂回。
答案 1 :(得分:2)
您可以选择跨页面列表中的元素,然后使用页内列表进行过滤:
var chkBoxes = $("#" + idContainerArray.join(",#"));
chkBoxes = chkBoxes.filter("#" + idArray.join(",#"));
chkBoxes.prop("checked", true);
您可以省略过滤器。是否可以将idContainerArray
中包含的元素用作当前页面上的ID,但不包含在idArray
中?因为,如果没有,您可以跳过过滤器,只需执行此操作:
$("#" + idContainerArray.join(",#")).prop("checked", true);
即使将id重复用作复选框以外的其他内容,此方法仍然有效。如果将checked属性写入非复选框元素,则checked属性不会受到影响或有任何副作用。如果id可以重用,但不能作为复选框,并且您不想编写checked
属性,则可以过滤掉非复选框:
$("#" + idContainerArray.join(",#")).filter(":checkbox").prop("checked", true);
或者:
$("#" + idContainerArray.join("[type=checkbox],#") + "[type=checkbox]").prop("checked", true);
第二种不使用jQuery :checkbox
速记的技术可能会更快,因为它会利用浏览器的原生querySelectorAll()
调用。在大多数页面上,你不会注意到差异。
答案 2 :(得分:0)
checked
属性值必须为checked
。正如McGarnagle指出id的选择器是#
var idArray = [];
var idContainerArray = [];
$.each(idArray, function (i, el) {
if ($.inArray(el, idContainerArray) != -1) {
$('#' + el).attr("checked", "checked");
}
});