Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you set multiple attributes with the DOM's setAttribute function?

Let's say I wanted to create an input element using the DOM. Instead of doing something like this

var input = document.createElement("input");
input.setAttribute("class", "my-class");
input.setAttribute("type", "checkbox");
input.setAttribute("checked", "checked");

Is there a DRYer way to write these three lines of code into one line.

I know you could do something like this

var attributes = ["class", "type", "checked"];
var values = ["my-class", "checkbox", "checked"];

for (var i = 0; i < attributes.length; i++) {
  input.setAttribute(attributes[i], values[i])
end

The problem is that is only helpful if you have a boatload of attributes you need to add. If you only have two or three, this is even less DRY.

Is there anyway I can dry up this code?

like image 683
Richard Hamilton Avatar asked May 29 '15 17:05

Richard Hamilton


2 Answers

I personally think you're taking DRY too far (the three statements do different things, so I don't see how it's not DRY.) But if you must abstract it, just write a function to do it:

var input = document.createElement("input");

function setAttributes(el, options) {
   Object.keys(options).forEach(function(attr) {
     el.setAttribute(attr, options[attr]);
   })
}

setAttributes(input, {"class": "my-class", "type": "checkbox", "checked": "checked"});

console.log(input);
like image 63
Mathletics Avatar answered Sep 26 '22 07:09

Mathletics


Yes, You can do using Jquery.

$(input).attr(
{
  "data-test-1": num1, 
  "data-test-2": num2
});
like image 36
Kaushik Thanki Avatar answered Sep 23 '22 07:09

Kaushik Thanki