getElementsByClass(searchClass,node,tag)
A quick and elegant way of grabbing elements by a className by Dustin Diaz
Supply a class name as a string.
(optional) Supply a node. This can be obtained by getElementById, or simply by just throwing in document (it will be document if dont supply a node)). Its mainly useful if you know your parent and you dont want to loop through the entire D.O.M.
(optional) Limit your results by adding a tagName. Very useful when youre toggling checkboxes and etcetera. You could just supply input.
function getElementsByClass(searchClass,node,tag) {
var classElements = new Array();
if ( node == null )
node = document;
if ( tag == null )
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}
Here is a sample useage:
<html>
<head>
<title>getElementsByClass</title>
<script type="text/javascript">
<!--
function showFoo() {
var el = getElementsByClass(document,'foo','*');
alert(el.length);
}
//-->
</script>
</head>
<body>
<div id="wrapper">
<div>
<p>Searching <span class="foo">foo</span></p>
<p class="foo">foo</p>
<p class="bar Foo">boo Far</p>
<p class="bar foo">boo far</p>
<p class="foo bar">foo bar</p>
<p class="fooo">fooo</p>
<p class="foobar">foobar</p>
<p class="bar foo bars">bar foo bars</p>
<p class="boofar">boofar</p>
<button onclick="showFoo();">Show Total foo</button>
</div>
</body>
Pushing the button shows "5"
See also: