以下代码:
<div id='idiv' name='ndiv'>
<script>
var attrs = $('#idiv').attr({})
var astr = JSON.stringify(attrs)
console.log (astr)
</script>
在控制台中生成:
{"0":{},"length":1,"context":{"location":{}},"selector":"#idiv"}
为什么不是结果:
{"id":"idiv","name":"ndiv"}
我如何得到后者?
答案 0 :(得分:2)
试试这个:
<div id='idiv' name='ndiv'>
<script>
var attrMap = $('#idiv')[0].attributes;
var attrs = {};
$.each(attrMap, function(i,e) { attrs[e.nodeName] = e.value; });
console.log(attrs); // Object {id: "idiv", name: "ndiv"}
console.log(JSON.stringify(attrs)) // {"id":"idiv","name":"ndiv"}
</script>
答案 1 :(得分:0)
jQuery运算符通常是可链接的,通常返回元素数组,而不是单个元素。
您所做的实际上是返回匹配元素列表,并要求该列表中所有项目的属性,这也是返回列表元素。 JSON.stringify反映了这一点。
答案 2 :(得分:0)
如果要创建元素所有属性的对象,请参阅this SO answer
生成您显示的对象:
var idiv = $('#idiv');
var attrs = JSON.stringify({
"id": idiv.attr("id"),
"name": idiv.attr("name")
});
console.log(attrs);