Как в jQuery выбрать элемены среди уже выбранных элементов?

Для всех ссылок на странице я делаю некий анализ и в зависимости от их контента некоторые из них причесываю. Сейчас это выглядит так:
// добавляем иконку для ссылок на файлы
$('a').each(function () {
var
	_this = $(this),
	css$ = _this.attr('class');
	switch (true) {
		case /file-pdf/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-pdf-o"></i>&nbsp;'); break;
		case /file-doc/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-word-o"></i>&nbsp;'); break;
		case /file-xls/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-excel-o"></i>&nbsp;'); break;
		case /file-ppt/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-powerpoint-o"></i>&nbsp;'); break;
		case /file-zip/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-zip-o"></i>&nbsp;'); break;
		case /file-txt/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-text-o"></i>&nbsp;'); break;
		case /file-code/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-code-o"></i>&nbsp;'); break;
		case /file-image/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-image-o"></i>&nbsp;'); break;
		case /file-audio/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-audio-o"></i>&nbsp;'); break;
		case /file-video/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-video-o"></i>&nbsp;'); break;
		case /file/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-o"></i>&nbsp;'); break;
		default: break;
	}
});
// вешаем плавную прокрутку для ссылок на локальные якоря
$('a[href^="#"]').click(function (e) {
	e.preventDefault();
	var
		id = $(this).attr('href'),
		top = $(id).offset().top - 10;
	$('body,html').animate({ scrollTop: top }, 500);
});


Есть ли смысл оптимизировать код (в том числе для навешивания дополнительного функционала) способом отдельного получения выборки всех ссылок и дальнейшей работы уже с выборкой? Чтобы каждый раз не пробегать все дерево страницы. И если да, то как это сделать? Каким способом правильно фильтровать элементы из уже выбранных элементов (find, как я понял, ищет внутри, а не среди элементов)?

Типа того:
var a = $('a');
a.each(...)...
a.find(...)...
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Выбросить все и заменить на css, не?
.file-code:before {
  /* иконка */
}


Если нужно именно на js, то можно вообще убрать весь этот switch-case
$('a').each(function () {
var
  _this = $(this),
  cls = _this.attr('class');
  _this.before('<i class="file-icon fa fa-fw fa-' + cls + '-o"></i>&nbsp;');
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы