将.attr()与.get()一起使用问题

Using .attr() with .get() Issues

本文关键字:问题 一起 attr get      更新时间:2023-09-26

我正试图通过使用遍历div容器中的每个段落元素来将对象数组存储在数组中。CCD_ 2方法。我尝试使用访问属性。attr(),但它似乎不起作用。如何修改此代码以便能够访问每条消息的"id"属性?

        var messages = $("#message_container p").get();
        var idstest = [];
        for (int i = 0; i < messages.length; i++){
            idstest.push(messages[i].attr("id"));
        }

我认为这与一些根本的不兼容有关。CCD_ 4和。attr()。当我"提醒"由提供的对象时。get()我得到了[object HTML---]。我认为这不是使用所必需的形式。attr

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);
}

改为尝试:

var idstest = [];

 $("#message_container p").each(function(i){
idstest.push($(this).attr("id"));

});

只想添加$.map快捷方式:http://jsfiddle.net/UuWq3/.

var idstest = $.map(messages, function(elem) {
    return $(elem).attr("id");
});

$.map返回基于原始数组(或jQuery对象(的新数组。返回的数组是用您传递的函数构造的(在这种情况下,messages由函数转换,这样每个元素都会被其ID替换(。

您应该将对象包装在jQuery容器中:

$(messages[i]).attr("id")

实际上这里不需要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,那么为了一致性和可读性,你最好坚持使用它(在这里使用其他正确答案中的代码(。