2014-08-27 22 views
0

下面的代码:无法获取DIV与jQuery的ATTR属性()

<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

正如一个评论,尝试用分号每个语句的结尾 – 2014-08-27 18:08:20

+0

我一直虔诚地使用分号,直到我发现它们在JavaScript中完全是可选的。现在我高兴地从不使用它们,因为我不需要。 – tgoneil 2014-08-27 18:20:53

+0

它们并不总是可选的,在某些情况下它们不是可选的。因此,始终使用它们是一种很好的做法。你应该检查这个答案:http://stackoverflow.com/a/1169596/3645944 – 2014-08-27 18:24:15

回答

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> 

小提琴:http://jsfiddle.net/xbuhbqux/

+0

这很有效,所以谢谢巴勃罗。我很惊讶它必须如此复杂。那是使用jquery提取html元素属性的典型方法吗?有一种更简单的方法吗? – tgoneil 2014-08-27 18:16:55

+0

@tgoneil这些是3行,我不认为它是如此复杂。但我认为没有理由去获得元素的所有属性,为什么要这样做呢? – 2014-08-27 18:18:54

+0

没有冒犯,但在这里我们再次去,与“我无法想象你为什么想这样做”这样的问题。我经常看到这个。它假定提出这个问题的人足够明智地理解为什么人们需要特定的编程技术的所有有效理由。为了回答你的问题,我正在利用jquery操纵DOM的能力。我从零静态HTML开始,并从那里开始。这将是可能的,但是非常繁琐的是跟踪使用单独的数据结构添加的属性。因此需要jQuery来回报。 – tgoneil 2014-08-27 18:27:55

0

jQuery的运营商往往可链接,通常会返回一个元素的数组,而不是单个元素。

你在做什么实际上是返回一个匹配元素列表,并要求该列表中所有项目的属性,这也是返回一个列表元素。 JSON.stringify反映了这一点。

0

如果你想创建一个元素的所有属性的对象,是指this SO answer

生产已显示对象:

var idiv = $('#idiv'); 
var attrs = JSON.stringify({ 
    "id": idiv.attr("id"), 
    "name": idiv.attr("name") 
}); 
console.log(attrs); 
+0

我意识到如果我明确地调用attr()与attr('id')等,我可以得到的属性。这假定我知道属性名称提前,我不知道。 – tgoneil 2014-08-27 18:19:40

+0

或者至少有方便的访问。更多细节在我对答案的答复之一中。 – tgoneil 2014-08-27 18:32:31