1/* 2 Developed by Robert Nyman, http://www.robertnyman.com 3 Code/licensing: http://code.google.com/p/getelementsbyclassname/ 4*/ 5var getElementsByClassName = function (className, tag, elm){ 6 if (document.getElementsByClassName) { 7 getElementsByClassName = function (className, tag, elm) { 8 elm = elm || document; 9 var elements = elm.getElementsByClassName(className), 10 nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null, 11 returnElements = [], 12 current; 13 for(var i=0, il=elements.length; i<il; i+=1){ 14 current = elements[i]; 15 if(!nodeName || nodeName.test(current.nodeName)) { 16 returnElements.push(current); 17 } 18 } 19 return returnElements; 20 }; 21 } 22 else if (document.evaluate) { 23 getElementsByClassName = function (className, tag, elm) { 24 tag = tag || "*"; 25 elm = elm || document; 26 var classes = className.split(" "), 27 classesToCheck = "", 28 xhtmlNamespace = "http://www.w3.org/1999/xhtml", 29 namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null, 30 returnElements = [], 31 elements, 32 node; 33 for(var j=0, jl=classes.length; j<jl; j+=1){ 34 classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"; 35 } 36 try { 37 elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null); 38 } 39 catch (e) { 40 elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null); 41 } 42 while ((node = elements.iterateNext())) { 43 returnElements.push(node); 44 } 45 return returnElements; 46 }; 47 } 48 else { 49 getElementsByClassName = function (className, tag, elm) { 50 tag = tag || "*"; 51 elm = elm || document; 52 var classes = className.split(" "), 53 classesToCheck = [], 54 elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag), 55 current, 56 returnElements = [], 57 match; 58 for(var k=0, kl=classes.length; k<kl; k+=1){ 59 classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)")); 60 } 61 for(var l=0, ll=elements.length; l<ll; l+=1){ 62 current = elements[l]; 63 match = false; 64 for(var m=0, ml=classesToCheck.length; m<ml; m+=1){ 65 match = classesToCheck[m].test(current.className); 66 if (!match) { 67 break; 68 } 69 } 70 if (match) { 71 returnElements.push(current); 72 } 73 } 74 return returnElements; 75 }; 76 } 77 return getElementsByClassName(className, tag, elm); 78};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.