Это мой вариант функции getElementsByClassName. Я в нём я попытался учесть все варианты.
function byClass(elem,classList){
if(typeof elem=='string'){
classList=elem;
elem=document;
}
var retElems=[];
if(elem.getElementsByClassName)//Проверяем поддержку getElementsByClassName
retElems=elem.getElementsByClassName(classList);
else if(elem.querySelectorAll)//Разбиваем строка на массив и тут же склеиваем с вставкой ' .'
retElems=elem.querySelectorAll('.'+classList.split(' ').join('.'));
else{//Если нет то ищем вручную
classList=classList.split(' ');//Разбираем на масcив 'class1 class2'.split(' ')=['class1','class2']
var classElemList=[];
var elemList=elem.getElementsByTagName('*');//Получаем всех потомков elem
var trueList=[];
var elemLen=elemList.length;
for(var a=0;a<elemLen;a++){//Перебор всех элементов
classElemList=elemList[a].className.split(' ');//Разбираем на массив классы текущего
if(classElemList.length>=classList.length){//Если количество классов больше то продолжаем
trueList=[];
//Дальше идёт проверка есть ли эти классы в элементе
for(var b=0;b<classElemList.length;b++)
for(var c=0;c<classList.length;c++)
if(classElemList[b]==classList[c]) trueList.push(true);
//Если количество совпавших равно то добавляем
if(classList.length==trueList.length)retElems.push(elemList[a]);
//Больше нельзя будут не совпадения с getElementsByClassName
}
}
}
return retElems;
}
Переделал, добавил querySelectorAll и немного увеличил скорость.
Пример использования
byClass(document.getElementById('div1'),'nav class1')[2].style.color='#0ff';
или
byClass('class2')[0].style.color='#f00'
Хочу узнать про недоработки.
Заранее спасибо.