我试图通过使用。div
方法遍历get()
容器中的每个段落元素来存储数组中的对象数组。我尝试使用。attr()
访问该属性,但它似乎不起作用。如何修改此代码以便能够访问每条消息的“id”属性?
var messages = $("#message_container p").get();
var idstest = [];
for (int i = 0; i < messages.length; i++){
idstest.push(messages[i].attr("id"));
}
我认为这与。get()
和。attr()
的基本不兼容有关。当我'提醒'由get()
提供的对象时,我得到[object HTML---]
。我假设这不是使用的必要形式。attr
?
答案 0 :(得分:3)
get
将为您提供DOM元素。这些不是jquery对象,因此您不能对它们使用attr
。这里没有理由使用get
。
var messages = $("#message_container p");
var idstest = [];
messages.each(function(){
idstest.push($(this).attr("id"));
});
编辑:您也无法使用int
。
如果由于某种原因您确实想要使用get
来获取原始DOM元素,那么您只需使用.id
:
var messages = $("#message_container p").get();
var idstest = [];
for (var i = 0; i < messages.length; i++) {
idstest.push(messages[i].id);
}
答案 1 :(得分:1)
尝试改为:
var idstest = [];
$("#message_container p").each(function(i){
idstest.push($(this).attr("id"));
});
答案 2 :(得分:1)
只是想添加$.map
快捷方式:http://jsfiddle.net/UuWq3/。
var idstest = $.map(messages, function(elem) {
return $(elem).attr("id");
});
$.map
基于原始数组(或jQuery对象)返回一个新数组。返回的数组是使用您传递的函数构造的(在这种情况下,messages
由函数转换,以便每个元素都替换为它的ID。)
答案 3 :(得分:0)
您应该将对象包装在jQuery容器中:
$(messages[i]).attr("id")
答案 4 :(得分:0)
实际上这里不需要jQuery,这个纯JavaScript可以在所有浏览器上正常工作:
var idstest = [];
var container = document.getElementById("message_container");
if (container) {
var messages = container.getElementsByTagName("p");
for (var i = 0; i < messages.length; i++) {
idstest.push(messages[i].id);
}
}
jQuery一切都很好而且功能强大,但是如果你可以用简短/简单的纯JS来完成相同的任务那么为什么不呢?
这就是说,如果您现有的所有代码都是jQuery,那么为了保持一致性和可读性,您可能最好坚持使用它(使用其他正确答案中的代码)。