Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add class to an element create by appendChild [duplicate]

I want to ask how to add a class for an element I create by appendChild in javascript

document.forms[0].appendChild(document.createElement("input"));

How to add a class for the input element I created?

I just use Javascript and I don't like jQuery, please send answer in pure javascript.

like image 386
Alfred Seattle Avatar asked Sep 25 '12 07:09

Alfred Seattle


People also ask

How do I add a class to an element in HTML?

To add a class to an element rather than replacing its existing classes, use the += operator instead. Note, it is important to prefix the new classname with space; otherwise, one of the existing classes of an element is lost.

What does appendChild () method perform?

The appendChild() method of the Node interface adds a node to the end of the list of children of a specified parent node. If the given child is a reference to an existing node in the document, appendChild() moves it from its current position to the new position.


2 Answers

I want to ask how to add a class for an element I create by appendChild in javascript

Like any other element you have a reference. It doesn't matter if it's created in JS via createElement, or you obtained a reference to the node in another way. Assuming input contains the reference to your node:

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

You can either use className:

input.className = "foo";

classList:

input.classList.add("foo");

setAttribute:

input.setAttribute("class", "foo");

The first one is widely supported by any browser, so I strongly suggest that one unless you're not in a modern browser and you want to manipulate each class you set, so classList will be more useful. I strongly avoid the latter, because with setAttribute you're going to set the HTML's attribute not the class name of the JS object: then the browser will map that value to the JS's property but in some cases it will fails (see, for instance, some versions of IE) so the class won't be applied even if the HTML node will have that attribute.

Notice that all the methods above are working despite how to HTML node reference is obtained, so also with:

var input = document.getElementById("my-input");

And so on.

In your case, because appendChild returns the reference to the node appended, you can also write everyting in one statement:

document.forms[0]
    .appendChild(document.createElement("input"))
    .className = "foo";

Hope it helps.

like image 121
ZER0 Avatar answered Sep 20 '22 10:09

ZER0


You need a variable for the created element.

var input = document.createElement("input");
input.className = 'class_to_add';
document.forms[0].appendChild(input);

Update:

.appendChild return the child, so you could also do it with out a variable:

document.forms[0].appendChild(document.createElement("input")).className = "class_to_add";
like image 44
xdazz Avatar answered Sep 17 '22 10:09

xdazz