2012-02-24 2 views
3

Есть ли функция быстрого доступа, которая преобразует элемент DOM и его различные пары атрибут/значение в соответствующий объект Javascript?Преобразование пар атрибутов/значений элемента DOM в объект Javascript?

Например, преобразовать это в странице HTML:

<div id="snack" type="apple" color="red" size="large" quantity=3></div> 

к объекту в Javascript, как если бы вы ввели:

var obj = { 
     id: "snack" 
     type: "apple" 
     color: "red" 
     size: "large" 
     quantity: 3 
}; 
+0

Если ISN» Это отличная идея для плагина. – Stephen

ответ

5

Не совсем ярлык, но по крайней мере, короткая реализация, которая делает что вы хотите:

var attributes = document.getElementById('someId').attributes; 
var obj = {}; 

for (var i = 0, len = attributes.length; i < len; i++) { 
    obj[attributes[i].name] = attributes[i].value; 
} 
+1

Могу ли я предложить: '(var i = 0, len = attributes.length; i

+0

Согласовано и обновлено. Даже AFAIK todays js engine кэширует путь объектов после первого удара и усиления производительности. –

+1

Я запускал [код] (http://jsfiddle.net/sMX4M/), и он работает. – OnesimusUnbound

1

Почему бы не использовать данные HTML и JQuery?

// First, append the attributes with `data-`. 
<div id="snack" data-type="apple" data-color="red" 
    data-size="large" data-quantity="3"></div> 


// Then use jQuery to retrive the data, for this case, 
// the `snack` variable is populated 
var snack = $("#snack").data(); 

for(prop in snack) { 
    alert(prop + " => " + snack[prop]); 
} 

sample code

Я не уверен, что если вы разрешили использовать JQuery

+0

Это замечательно! Хотел бы я выбрать два ответа. Сначала я ответил так, как я спросил, и это повторно формулирует вопрос очень полезной для этой задачи. – prototype

1

В более функциональном стиле, один оператор:

[].slice.call(attributes).reduce(function(obj,attr){obj[attr.name] = attr.value;return obj;},{})

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