2014-08-27 3 views
0

Следующий код:Не удается получить атрибуты DIV с ATTR Jquery (в)

<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

Так же, как комментарий, попробуйте использовать точку с запятой в конец каждого утверждения –

+0

Я использовал точки с запятой религиозно, пока не узнал, что они полностью необязательны в javascript. Теперь я счастливо никогда их не использую, поскольку мне это не нужно. – tgoneil

+0

Они не всегда являются необязательными, в некоторых случаях они не являются необязательными. Поэтому всегда полезно использовать их. Вы должны проверить этот ответ: http://stackoverflow.com/a/1169596/3645944 –

ответ

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> 

Fiddle: http://jsfiddle.net/xbuhbqux/

+0

Это работает, так что спасибо Пабло. Я удивлен, что это должно быть так сложно. Это типичный способ извлечения атрибутов элемента html с помощью jquery? Есть ли более простой способ? – tgoneil

+0

@tgoneil Это 3 строки, я не думаю, что это так сложно. Но я думаю, что нет причин получить все атрибуты элемента, зачем вам это нужно? –

+0

Не обижайтесь, но здесь мы идем снова, с «Я не могу представить, почему вы хотели бы сделать этот» вопрос. Я вижу это регулярно. Предполагается, что тот, кто задает вопрос, достаточно мудр, чтобы оценить все обоснованные причины, по которым у кого-то будет потребность в конкретном методе программирования. Чтобы ответить на ваш вопрос, я пользуюсь огромным преимуществом способности jquery манипулировать DOM. Я начинаю с нуля статического html и идем оттуда. Было бы возможно, но крайне утомительно отслеживать атрибуты, добавленные с отдельными структурами данных. Следовательно, требуется jquery для отчета. – tgoneil

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

+0

Или, по крайней мере, иметь удобный доступ. Более подробная информация содержится в одном из моих ответов на ответ. – tgoneil

Смежные вопросы