1

我有两个数组。第一个数组(idContainerArray)包含我跨页面选择的复选框的 ID。

第二个数组(idArray)将包含当前页面复选框的 ID。

我想比较这两个数组,如果找到匹配项,则选中当前页面上的相应复选框。

下面的代码执行没有错误,但不会选中这些框。

jQuery:

var idArray = [];
        var idContainerArray = [];

       $.each(idArray, function (i, el) {
            if ($.inArray(el, idContainerArray) != -1) {
                   $(el).prop("checked", true);
            }
        });
4

3 回答 3

3

您没有完全正确地选择 DOM 元素。 el应该是'#' + el

$("#" + el).prop("checked", true);

小提琴演示。

编辑

感谢@Blender,document.getElementById(el).checked = true这似乎是一种不那么迂回的方式。

于 2013-07-29T22:37:03.023 回答
2

您可以选择跨页列表中的元素,然后使用页内列表进行过滤:

var chkBoxes = $("#" + idContainerArray.join(",#"));
chkBoxes = chkBoxes.filter("#" + idArray.join(",#"));
chkBoxes.prop("checked", true);

您可以省略过滤器。是否可以将包含在的元素idContainerArray用作当前页面上的 id,但包含在 中idArray?因为,如果没有,您可以跳过过滤器并执行以下操作:

$("#" + idContainerArray.join(",#")).prop("checked", true);

即使 id 被用作复选框以外的东西,这也有效。如果将选中的属性写入非复选框元素,它不会受到伤害或产生任何副作用。如果id可以复用,但不能作为checkbox,又不想写checked属性,可以过滤掉非checkbox:

$("#" + idContainerArray.join(",#")).filter(":checkbox").prop("checked", true);

或者:

$("#" + idContainerArray.join("[type=checkbox],#") + "[type=checkbox]").prop("checked", true);

第二种不使用 jQuery:checkbox速记的技术可能会更快一些,因为它将利用浏览器的本机querySelectorAll()调用。在大多数页面上,您不会注意到差异。

于 2013-07-29T22:43:07.183 回答
0

属性值checked必须是。checked正如 McGarnagle 指出的 id 的选择器是#

var idArray = [];
    var idContainerArray = [];

   $.each(idArray, function (i, el) {
        if ($.inArray(el, idContainerArray) != -1) {
               $('#' + el).attr("checked", "checked");
        }
    });
于 2013-07-29T22:36:43.917 回答