2014-08-27 61 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