You can write the getElementsByClassName function, which tries qSA, then the getElementsByClassName proper name, then the DOM, as shown below.
, , 3 , .
function getByClassName(cName, root) {
root = root || document;
var reClasses = [], classMatch;
var set = [], node, nodes;
if (root.querySelectorAll) {
alert('qsa');
return root.querySelectorAll(cName);
}
cName = cName.replace(/\./g, ' ').replace(/^\s+/,'').replace(/\s+$/,'');
if (root.getElementsByClassName) {
alert('gEBCN');
nodes = root.getElementsByClassName(cName);
for (var i=0, iLen=nodes.length; i<iLen; i++) {
set[i] = nodes[i];
}
return set;
}
nodes = root.getElementsByTagName('*');
cName = cName.split(/\s+/);
for (var j = 0, jLen = cName.length; j < jLen; j++) {
reClasses[j] = new RegExp('(^|\\s+)' + cName[j] + '\\s+|$');
}
for (var m = 0, mLen = nodes.length; m < mLen; m++) {
node = nodes[m];
classMatch = true;
for (var n = 0, nLen = reClasses.length; n < nLen && classMatch; n++) {
classMatch = node.className && reClasses[n].test(node.className);
}
if (classMatch) {
set.push(node);
}
}
return set;
}