|
|
(76 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| /*
| |
| Developed by Robert Nyman, http://www.robertnyman.com
| |
| Code/licensing: http://code.google.com/p/getelementsbyclassname/
| |
| */
| |
| var getElementsByClassName = function (className, tag, elm){
| |
| if (document.getElementsByClassName) {
| |
| getElementsByClassName = function (className, tag, elm) {
| |
| elm = elm || document;
| |
| var elements = elm.getElementsByClassName(className),
| |
| nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
| |
| returnElements = [],
| |
| current;
| |
| for(var i=0, il=elements.length; i<il; i+=1){
| |
| current = elements[i];
| |
| if(!nodeName || nodeName.test(current.nodeName)) {
| |
| returnElements.push(current);
| |
| }
| |
| }
| |
| return returnElements;
| |
| };
| |
| }
| |
| else if (document.evaluate) {
| |
| getElementsByClassName = function (className, tag, elm) {
| |
| tag = tag || "*";
| |
| elm = elm || document;
| |
| var classes = className.split(" "),
| |
| classesToCheck = "",
| |
| xhtmlNamespace = "http://www.w3.org/1999/xhtml",
| |
| namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
| |
| returnElements = [],
| |
| elements,
| |
| node;
| |
| for(var j=0, jl=classes.length; j<jl; j+=1){
| |
| classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
| |
| }
| |
| try {
| |
| elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
| |
| }
| |
| catch (e) {
| |
| elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
| |
| }
| |
| while ((node = elements.iterateNext())) {
| |
| returnElements.push(node);
| |
| }
| |
| return returnElements;
| |
| };
| |
| }
| |
| else {
| |
| getElementsByClassName = function (className, tag, elm) {
| |
| tag = tag || "*";
| |
| elm = elm || document;
| |
| var classes = className.split(" "),
| |
| classesToCheck = [],
| |
| elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
| |
| current,
| |
| returnElements = [],
| |
| match;
| |
| for(var k=0, kl=classes.length; k<kl; k+=1){
| |
| classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
| |
| }
| |
| for(var l=0, ll=elements.length; l<ll; l+=1){
| |
| current = elements[l];
| |
| match = false;
| |
| for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
| |
| match = classesToCheck[m].test(current.className);
| |
| if (!match) {
| |
| break;
| |
| }
| |
| }
| |
| if (match) {
| |
| returnElements.push(current);
| |
| }
| |
| }
| |
| return returnElements;
| |
| };
| |
| }
| |
| return getElementsByClassName(className, tag, elm);
| |
| };
| |
|
| |
|
| function getChildrenByTagName(parent, name) {
| |
| var nodeList = [];
| |
| for (var child = parent.firstChild; child != null; child = child.nextSibling) {
| |
| alert(name + child.nodeName);
| |
| if (child.nodeType == 1 && name == child.nodeName) { nodeList.push(child); }
| |
| }
| |
| return nodeList;
| |
| }
| |
|
| |
| /* This assumes that every tabcontent div is paired with one tab div. */
| |
| var destinations = getElementsByClassName("tab");
| |
| alert(destinations.length);
| |
| var tabcontents = getElementsByClassName("tabcontent");
| |
| alert(tabcontents.length);
| |
| for( var i = 0; i < tabcontents.length; ++i ) {
| |
| var tabs = getChildrenByTagName(tabcontents[i], "ul");
| |
| alert(tabs.length);
| |
| for( var j = 0; j < tabs.length; ++j ) {
| |
| /* Move from tabcontents ul to tab ul */
| |
| destinations[i].firstChild.appendChild(tabs[j].firstChild);
| |
| /* Remove the now empty tabcontents ul */
| |
| tabcontents[i].removeChild(tabs[j]);
| |
| }
| |
| }
| |