使用.attr()和.get()问题

时间:2011-11-27 18:17:19

标签: javascript jquery

我试图通过使用。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

5 个答案:

答案 0 :(得分:3)

get将为您提供DOM元素。这些不是jquery对象,因此您不能对它们使用attr。这里没有理由使用get

    var messages = $("#message_container p");
    var idstest = [];

    messages.each(function(){
        idstest.push($(this).attr("id"));
    });

http://jsfiddle.net/ujdeH/

编辑:您也无法使用int

如果由于某种原因您确实想要使用get来获取原始DOM元素,那么您只需使用.id

http://jsfiddle.net/ujdeH/1/

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,那么为了保持一致性和可读性,您可能最好坚持使用它(使用其他正确答案中的代码)。