Javascript 为什么必须从集合中重新选择JQuery元素?
我的页面上有许多复选框,每个复选框都有一个name属性作为其有用值 我只想获取选中项的值列表。我可以得到这样的元素集合Javascript 为什么必须从集合中重新选择JQuery元素?,javascript,jquery,Javascript,Jquery,我的页面上有许多复选框,每个复选框都有一个name属性作为其有用值 我只想获取选中项的值列表。我可以得到这样的元素集合 var checkedItems = $(".checkbox:checked"); 现在我想创建列表(字符串),所以我创建了一个循环 var list = ""; for (var i = 0; i < checkedItems.length; i++) { list += $(checkedItems[i]).attr("name") + "\n"; }
var checkedItems = $(".checkbox:checked");
现在我想创建列表(字符串),所以我创建了一个循环
var list = "";
for (var i = 0; i < checkedItems.length; i++) {
list += $(checkedItems[i]).attr("name") + "\n";
}
但是数组肯定已经是JQuery元素的集合了吗?为什么要重播
如果有人想尝试的话,请参考工作示例
编辑:为什么这个工作
var item = $("#item");
var name = item.attr("name");
为了能够调用jQuery函数,您需要将内容包装在
$()
或jQuery()
中
我已将示例固定在
您需要使用
list+=$(checkedItems[i]).attr(“name”)+“\n”代码>你问题中的列表构建代码不起作用;应该是:
for (var i = 0; i < checkedItems.length; i++)
list += $(checkedItems[i]).attr("name") + "\n"; // or just checkedItems[i].name
checkedItems[i]
是原始DOM元素,而不是jQuery对象。
要获取集合中给定元素的jQuery对象,请调用checkedItems.eq(i)
你可以通过写作更好地做到这一点
var list = $(".checkbox:checked")
.map(function() { return this.name; })
.get()
.join('\n');
我想你实际上是这样做的:
list += $(checkedItems[i]).attr("name") + "\n";
checkedItems
是jQuery选择。它包含对所包含元素的引用。这些元素可以通过jQuery方法操作,也可以通过checkedItems[n]
直接访问,其中n
是一个基于0的索引
这些属性不是jQuery选择:它们是本机DOM元素。如果您想使用jQuery方法,如attr
,则需要创建一个新的jQuery对象,包装该本地对象
在这种情况下,您可以通过使用方法避免这种情况,该方法使用数字键从原始选择中获取jQuery选择:
list += checkedItems.eq(i).attr('name') + "\n";
在您的情况下,最好结合使用map
和get
以及Array.prototype.join
:
var list = checkedItems.map(function() {
return this.name;
}).get().join('\n');
你问题中的代码是错误的,因为
$(checkedItems[i].attr("name"))
应该是
$(checkedItems[i]).attr("name")
除此之外,你真的应该这样做
var list = "";
checkedItems.each(function(){ list += this.name + '\n'; });
演示
它不起作用的原因是,当您使用[]
访问jQuery对象中的元素时,返回的是对DOM元素的直接引用,而不是另一个jQuery对象。修复了第一个示例,很抱歉在测试后更改回时出错。我知道这是可行的,我的意思是,在重新添加$()测试后进行位。请参阅我的编辑以了解我的其他困惑。这不是我的代码不工作的问题,我想知道为什么我必须再次显式设置-1。。。我已经发现我需要包装内容。我的问题是,为什么我需要这样做,而你没有提供答案。我只是投了反对票来反对我认为不合理的赞成票。我明白了,所以当JQuery选择器返回一个列表时,它是DOM元素的列表,而不是JQuery元素的列表?其中,作为返回一个项(如按id)的JQuery选择器,将是一个JQuery对象,并且可以直接访问属性?@musefan No。每个JQuery选择,包括一个元素或三百个元素,都只是一个引用本机DOM元素的对象[i]
有效地将本机DOM元素从jQuery包装器中“打开”。我现在明白了,我没有意识到通过[i]
访问会导致这种效果忘记了我代码中的打字错误(每个人似乎都想在没有正确阅读我编写的内容的情况下更正),您已经回答了实际问题,所以谢谢你;)
$(checkedItems[i]).attr("name")
var list = "";
checkedItems.each(function(){ list += this.name + '\n'; });