Всем доброго времени суток. Столкнулся с функцией следующего содержания:
function geByClass ( searchClass, node, tag ) {
var classElements = new Array( );
if ( node == null ) {
node = document;
}
if ( tag == null ) {
tag = '*';
}
if ( node.getElementsByClassName ) {
classElements = node.getElementsByClassName( searchClass );
if ( tag != '*' ) {
for ( var i = 0; i < classElements.length; i++ ) {
if ( classElements.nodeName == tag ) {
classElements.splice( i, 1 );
}
}
}
return classElements;
}
var els = node.getElementsByTagName( tag );
var elsLen = els.length;
var pattern = new RegExp( '(^|\\s)' + searchClass + '(\\s|$)' );
for ( var i = 0, j = 0; i < elsLen; i++ ) {
if ( pattern.test( els[ i ].className ) ) {
classElements[ j ] = els[ i ];
j++;
}
}
return classElements;
}
Функция используется ВКонтакте. Копался, копался и в итоге зашел в тупик.
Например, как может быть вызван
slice( ) для
classElements? Условие
if ( classElements.nodeName == tag ) { ... } в цикле
for ( var i = 0; i < classElements.length; i++ ) { ... }.
Насколько я понимаю,
nodeName нужно указывать у каждого элемента
classElements. Да и вообще не могу понять смысл всех этих конструкций. Ведь всегда функция будет возвращать массив объектов, найденных по классам (
return classElements в первой части функции), а не по тегам с указанными классами.
Если не сложно, можно объяснить смысл поверхностно. Да и вообще ваше мнение о ней. Спасибо.