Показать сообщение отдельно
  #1 (permalink)  
Старый 06.08.2010, 15:06
Новичок на форуме
Отправить личное сообщение для HelpMe Посмотреть профиль Найти все сообщения от HelpMe
 
Регистрация: 06.08.2010
Сообщений: 1

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

Последний раз редактировалось HelpMe, 06.08.2010 в 15:15.
Ответить с цитированием