比较两个数组的匹配值

时间:2013-07-29 22:33:24

标签: jquery

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

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

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

以下代码执行时没有错误,但不会检查框。

jquery:

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

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

3 个答案:

答案 0 :(得分:3)

你没有正确选择DOM元素。 el应为'#' + el

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

Fiddle demo.

修改

感谢@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");
        }
    });