tags:

views:

911

answers:

3

suppose id is known,

so the element can be specified by document.getElementById(element_id);

but I don't know if there is a built-in function that can be used to append a css class to

that element?

+6  A: 
var element = document.getElementById(element_id);
element.className += " " + newClassName;

voila. This will work on pretty much every browser ever. The leading space is important, because the className property treats the css classes like a single string, which ought to match the class attribute on HTML elements (where multiple classes must be separated by spaces).

Incidentally, you're going to be better off using a Javascript library like prototype or jquery, which have methods to do this, as well as functions that can first check if an element already has a class assigned.

In prototype, for instance:

// Prototype automatically checks that the element doesn't already have the class
$(element_id).addClassName(newClassName);

See how much nicer that is?!

Triptych
If all the op needs to do is add a class, I wouldn't advise downloading an entire javascript framework for this purpose. Would be rather bloated, no?
Elijah
@Elijah - there is also a cost associated with writing messy, less-readable javascript, which gets pretty unwieldy after about 15 lines of code. jquery is ~50k compressed - I think it's worth it pretty early on.
Triptych
@Triptych. Agreed on readability. And if you use the Google hosted version of the library, it may very well already be cached on the user's machine, thus possibly even saving time.
Nosredna
Triptych, there's no need for a library. If the OP so desires then he/she can create a suitable abstraction.
J-P
J-P, that's true But there are so many programmers using jQuery now that efficiency is greater if people are using the same abstraction. Of course, doesn't much matter on a site that the developer makes an will maintain on his own.
Nosredna
@J-P There's also no reason to assume that the OP is *only* using Javascript to change the class of a single element. In any case, I gave both answers; if the OP sees the need, he can make an informed decision.
Triptych
+1  A: 

You should be able to set the className property of the element. You could do a += to append it.

Tom Hubbard
A: 

When an element already has a class name defined, its influence on the element is tied to its position in the string of class names. Later classes override earlier ones, if there is a conflict.

Adding a class to an element ought to move the class name to the sharp end of the list, if it exists already.

document.addClass= function(el, css){
    var tem, C= el.className.split(/\s+/), A=[]; 
    while(C.length){
     tem= C.shift();
     if(tem && tem!= css) A[A.length]= tem;
    }
    A[A.length]= css;
    return el.className= A.join(' '); 
}
kennebec