Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ребят, помогите разобраться с функцией (https://javascript.ru/forum/misc/11099-rebyat-pomogite-razobratsya-s-funkciejj.html)

HelpMe 06.08.2010 15:06

Ребят, помогите разобраться с функцией
 
Всем доброго времени суток. Столкнулся с функцией следующего содержания:
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++ ) { ... }. :stop: Насколько я понимаю, nodeName нужно указывать у каждого элемента classElements. Да и вообще не могу понять смысл всех этих конструкций. Ведь всегда функция будет возвращать массив объектов, найденных по классам (return classElements в первой части функции), а не по тегам с указанными классами. :-E Если не сложно, можно объяснить смысл поверхностно. Да и вообще ваше мнение о ней. Спасибо. :thanks:


Часовой пояс GMT +3, время: 19:28.