Jquery 比较两个数组的匹配值

Jquery 比较两个数组的匹配值,jquery,Jquery,我有两个数组。 第一个数组(idContainerArray)包含我跨页面选择的复选框的ID 第二个数组(idArray)将包含当前页面复选框的ID 我想比较这两个数组,如果找到匹配项,则选中当前页面上相应的复选框 下面的代码执行时没有错误,但不会选中复选框 jquery: var idArray = []; var idContainerArray = []; $.each(idArray, function (i, el) { if (

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

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

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

下面的代码执行时没有错误,但不会选中复选框

jquery:

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

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

选中的
属性值必须是
选中的
。正如McGarnagle指出的那样,id的选择器是
#


选中的
属性值必须是
选中的
。正如McGarnagle指出的那样,id的选择器是
#


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

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

编辑


多亏了@Blender,
document.getElementById(el).checked=true
似乎没有那么迂回。

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

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

编辑


多亏了@Blender,
document.getElementById(el).checked=true
似乎不那么迂回。

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

var chkBoxes = $("#" + idContainerArray.join(",#"));
chkBoxes = chkBoxes.filter("#" + idArray.join(",#"));
chkBoxes.prop("checked", true);
您可以省略过滤器。
idContainerArray
中包含的元素是否可以用作当前页面上的id,但不能包含在
idArray
中?因为,如果没有,您可以跳过过滤器,只需执行以下操作:

$("#" + idContainerArray.join(",#")).prop("checked", true);
即使该id被重用为复选框以外的内容,也可以这样做。如果将checked属性写入非checkbox元素,则它不会受到伤害或产生任何副作用。如果id可以重复使用,但不能作为复选框使用,并且您不想写入
checked
属性,则可以过滤掉非复选框:

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


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

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

var chkBoxes = $("#" + idContainerArray.join(",#"));
chkBoxes = chkBoxes.filter("#" + idArray.join(",#"));
chkBoxes.prop("checked", true);
您可以省略过滤器。
idContainerArray
中包含的元素是否可以用作当前页面上的id,但不能包含在
idArray
中?因为,如果没有,您可以跳过过滤器,只需执行以下操作:

$("#" + idContainerArray.join(",#")).prop("checked", true);
即使该id被重用为复选框以外的内容,也可以这样做。如果将checked属性写入非checkbox元素,则它不会受到伤害或产生任何副作用。如果id可以重复使用,但不能作为复选框使用,并且您不想写入
checked
属性,则可以过滤掉非复选框:

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


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

为什么
attr
而不是
prop
?attr与html属性一起工作,而prop与DOM属性一起工作。有关详细信息,请参阅。查找后,从jQuery 1.6开始,
.prop(“checked”,true)
.attr(“checked”,checked”)
为什么
attr
而不是
prop
?attr与html属性一起工作,而prop与DOM属性一起工作,有关详细信息,请参阅。查找后,从jQuery 1.6开始,
开始,
.attr(“checked”,checked”)
或just
document.getElementById(el).checked=true
或just
document.getElementById(el).checked=true