Для всех ссылок на странице я делаю некий анализ и в зависимости от их контента некоторые из них причесываю. Сейчас это выглядит так:
// добавляем иконку для ссылок на файлы
$('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> '); break;
case /file-doc/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-word-o"></i> '); break;
case /file-xls/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-excel-o"></i> '); break;
case /file-ppt/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-powerpoint-o"></i> '); break;
case /file-zip/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-zip-o"></i> '); break;
case /file-txt/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-text-o"></i> '); break;
case /file-code/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-code-o"></i> '); break;
case /file-image/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-image-o"></i> '); break;
case /file-audio/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-audio-o"></i> '); break;
case /file-video/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-video-o"></i> '); break;
case /file/.test(css$): _this.before('<i class="file-icon fa fa-fw fa-file-o"></i> '); 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(...)...