Forum Moderators: open
function getElementByClass(cName,tag,p){
if(!cName){
return false;
}
tag = tag ¦¦ "*" ;
p = p ¦¦ document;
var i;
var cRegEx=new RegExp("(^¦\\s)"+cName+"(\\s¦$)");
var ra=[];
var a=p.getElementsByTagName(tag);
for(i=0;i<a.length;i++){
if(cRegEx.test(a[i].className)){
ra.push(a[i]);
}
}
return ra;
}
getElementByClass("foo","div",document.getElementById("bar")) // only div's with the class foo in the element bar
getElementByClass("foo") // all elements with the class bar
Untested, should work though
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset:utf-8">
<style type="text/css">
.hidden {
display: none;
}
.shown {
display: auto;
}
</style>
<title></title>
</head>
<body>
<div id="container">
<div class="meeting">Meeting 1</div>
<div class="meeting">Meeting 2</div>
<div class="table">Table 1</div>
<div class="event">Event 1</div>
<div class="other">Other 1</div>
</div>
<script type="text/javascript" src="http://yui.yahooapis.com/2.5.0/build/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var E = YAHOO.util.Event;
var D = YAHOO.util.Dom;
var i, ul, li, a, container = document.getElementById('container');
var els = D.getElementsBy(function(el) {
return (D.hasClass(el, 'meeting') ¦¦ D.hasClass(el, 'table') ¦¦ D.hasClass(el, 'event') ¦¦ D.hasClass(el, 'other'));
}, 'div', container);
var meetingEls = D.getElementsByClassName('meeting', 'div', container);
var tableEls = D.getElementsByClassName('table', 'div', container);
var eventEls = D.getElementsByClassName('event', 'div', container);
var otherEls = D.getElementsByClassName('other', 'div', container);
// Create the links for showing/hiding. Since these rely solely on
// JavaScript, create them using JavaScript rather than putting them
// in your markup. This is progressive enhancement.
var magicLinks = [
{id: 'showAll', txt: 'Show All', toShow: els},
{id: 'showMtg', txt: 'Show Meetings', toShow: meetingEls},
{id: 'showTbl', txt: 'Show Tables', toShow: tableEls},
{id: 'showEvt', txt: 'Show Events', toShow: eventEls},
{id: 'showOth', txt: 'Show Other', toShow: otherEls}
];
ul = document.createElement('ul');
for (i = 0; i < magicLinks.length; i++) {
li = document.createElement('li');
a = document.createElement('a');
a.href = '#';
a.id = magicLinks[i].id;
a.appendChild(document.createTextNode(magicLinks[i].txt));
E.on(a, 'click', function(e, toShowEls) {
E.stopEvent(e);
D.replaceClass(els, 'shown', 'hidden');
D.replaceClass(toShowEls, 'hidden', 'shown');
}, magicLinks[i].toShow);
li.appendChild(a);
ul.appendChild(li);
}
container.parentNode.insertBefore(ul, container);
});
</script>
</body>
</html>
a = document.createElement('a');
a.href = '#';
a.id = magicLinks[i].id;
Here is where I assign the onclick event listener:
E.on(a, 'click', function(e, toShowEls) {
E.stopEvent(e);
D.replaceClass(els, 'shown', 'hidden');
D.replaceClass(toShowEls, 'hidden', 'shown');
}, magicLinks[i].toShow);
ul = document.createElement('ul');
ul.id = 'submenu';
for (i = 0; i < magicLinks.length; i++) {
li = document.createElement('li');
if (i == magicLinks.length - 1) {
li.id = 'last';
}
a = document.createElement('a');
a.href = '#';
a.id = magicLinks[i].id; a.appendChild(document.createTextNode(magicLinks[i].txt));
E.on(a, 'click', function(e, toShowEls) {
E.stopEvent(e);
D.replaceClass(els, 'shown', 'hidden');
D.replaceClass(toShowEls, 'hidden', 'shown');
}, magicLinks[i].toShow);
li.appendChild(a);
ul.appendChild(li);
}