使用 Javascript/jQuery 从 HTML 元素获取所有属性

IT技术 javascript jquery attributes parsing
2021-01-15 19:44:23

我想将 Html 元素中的所有属性放入一个数组中:就像我有一个 jQuery 对象,其 html 如下所示:

<span name="test" message="test2"></span>

现在一种方法是使用这里描述的 xml 解析器,但是我需要知道如何获取我的对象的 html 代码。

另一种方法是使用 jquery 来实现,但是如何实现呢?属性的数量和名称是通用的。

谢谢

顺便说一句:我无法使用 document.getelementbyid 或类似的东西访问该元素。

6个回答

如果您只需要 DOM 属性,则attributes在元素本身上使用节点列表可能更简单

var el = document.getElementById("someId");
for (var i = 0, atts = el.attributes, n = atts.length, arr = []; i < n; i++){
    arr.push(atts[i].nodeName);
}

请注意,这仅使用属性名称填充数组。如果需要属性值,可以使用该nodeValue属性:

var nodes=[], values=[];
for (var att, i = 0, atts = el.attributes, n = atts.length; i < n; i++){
    att = atts[i];
    nodes.push(att.nodeName);
    values.push(att.nodeValue);
}
你可以使用getElementById-var el = document.getElementById($(myObj).attr("id"));
2021-03-22 19:44:23
警告:在 IE 中,这不仅被指定,而且所有可能的属性
2021-03-24 19:44:23
问题是我不能使用 getElementById,它是一个 jquery 对象。有没有一种方法可以让我在 jquery 这样的上下文中创建 getelementbyclassname ?
2021-04-05 19:44:23
@k0ni - 你可以使用例如 var atts = $(myObject)[0].attributes; ?
2021-04-05 19:44:23
您可以通过get方法从 jQuery 对象获取 DOM 对象...例如:var obj = $('#example').get(0);
2021-04-06 19:44:23

你可以使用这个简单的插件作为 $('#some_id').getAttributes();

(function($) {
    $.fn.getAttributes = function() {
        var attributes = {}; 

        if( this.length ) {
            $.each( this[0].attributes, function( index, attr ) {
                attributes[ attr.name ] = attr.value;
            } ); 
        }

        return attributes;
    };
})(jQuery);
我测试过,它适用于动态添加的属性(chrome)
2021-03-30 19:44:23
仅供参考:这仅公开选择器的第一个元素。
2021-03-31 19:44:23

简单的:

var element = $("span[name='test']");
$(element[0].attributes).each(function() {
console.log(this.nodeName+':'+this.nodeValue);});
Attr.nodeValuevalueGoogle Chrome 表示,已弃用 ,而支持所以这可能是this.name + ':' + this.value. Attr 接口
2021-03-25 19:44:23

因为在 IE7 中 elem.attributes 列出了所有可能的属性,不仅仅是当前的,我们必须测试属性值。此插件适用于所有主要浏览器:

(function($) {
    $.fn.getAttributes = function () {
        var elem = this, 
            attr = {};

        if(elem && elem.length) $.each(elem.get(0).attributes, function(v,n) { 
            n = n.nodeName||n.name;
            v = elem.attr(n); // relay on $.fn.attr, it makes some filtering and checks
            if(v != undefined && v !== false) attr[n] = v
        })

        return attr
    }
})(jQuery);

用法:

var attribs = $('#some_id').getAttributes();
根据我刚才的经验,这实际上比这要复杂一些。至少在某些情况下。例如,这会包括一个名为“dataFld”且值为“null”(字符串值)的属性还是会排除它?
2021-03-23 19:44:23
此处的拼写错误——第 6 行的 el.get(0) 应该是 elem.get(0)。
2021-03-30 19:44:23
它不适用于动态添加的属性,因为属性和属性并不总是同步。
2021-04-02 19:44:23

二传手和吸气剂!

(function($) {
    // Attrs
    $.fn.attrs = function(attrs) {
        var t = $(this);
        if (attrs) {
            // Set attributes
            t.each(function(i, e) {
                var j = $(e);
                for (var attr in attrs) {
                    j.attr(attr, attrs[attr]);
                }
            });
            return t;
        } else {
            // Get attributes
            var a = {},
                r = t.get(0);
            if (r) {
                r = r.attributes;
                for (var i in r) {
                    var p = r[i];
                    if (typeof p.nodeValue !== 'undefined') a[p.nodeName] = p.nodeValue;
                }
            }
            return a;
        }
    };
})(jQuery);

利用:

// Setter
$('#element').attrs({
    'name' : 'newName',
    'id' : 'newId',
    'readonly': true
});

// Getter
var attrs = $('#element').attrs();
很好,我最喜欢这个答案。非常适合与jQuery.attr.
2021-03-10 19:44:23
两个建议:您可以更新以使用“非缩小”变量名吗?我看到你jQuery.attr在 setter 中使用它,但在 getter 中使用它也可能是有益的。
2021-03-14 19:44:23
另外,小事 - 在您的第一个 for() 语句之后不应该有分号。
2021-03-22 19:44:23