#jquery #image #replace #attr #imagesource
#jquery #изображение #заменить #аттр #источник изображений
Вопрос:
У меня есть веб-приложение, которое заменяет несколько изображений на другие изображения.
Например: изображение с путем http://example.com/example/example/images/dir/1.gif пересчитывается с http://cdn.example.com/dir/1.gif .
Для этого я использую jQuery attr() .
Итак, мой код выглядит примерно так:
$('img[src="http://www.example.com/dir/images/dir/1.gif"]').attr('src', "http://cdn.example.com/dir/1.gif");
$('img[src="http://www.example.com/dir/images/dir/2.gif"]').attr('src', "http://cdn.example.com/dir/2.gif");
$('img[src="http://www.example.com/dir/images/dir/3.gif"]').attr('src', "http://cdn.example.com/dir/3.gif");
$('img[src="http://www.example.com/dir/images/dir/4.gif"]').attr('src', "http://cdn.example.com/dir/4.gif");
$('img[src="http://www.example.com/dir/images/dir/5.gif"]').attr('src', "http://cdn.example.com/dir/5.gif");
$('img[src="http://www.example.com/dir/images/dir/6.gif"]').attr('src', "http://cdn.example.com/dir/6.gif");
$('img[src="http://www.example.com/dir/images/dir/7.gif"]').attr('src', "http://cdn.example.com/dir/7.gif");
$('img[src="http://www.example.com/dir/images/dir/8.gif"]').attr('src', "http://cdn.example.com/dir/8.gif");
$('img[src="http://www.example.com/dir/images/dir/9.gif"]').attr('src', "http://cdn.example.com/dir/9.gif");
$('img[src="http://www.example.com/dir/images/dir/10.gif"]').attr('src', "http://cdn.example.com/dir/10.gif")
Итак, есть ли способ сжать это? Значит, он написан меньшим количеством символов?
Примечание: в каждой строке изображения на обоих веб-сайтах одинаковы. Пример, 1.gif снова заменяется на 1.gif но на другом сервере. Итак, в основном я хочу заменить сервер. Когда http://www.example.com/dir/images/dir / заменить на http://cdn.example.com/dir /.
Большое спасибо
Комментарии:
1. Если это делается по соображениям производительности (распределение полосы пропускания), вы должны делать это на стороне сервера.
2. 1 Фил, использование CDN для повышения производительности, но если вы делаете это после загрузки страницы, т.Е. Старые изображения уже загружены, а затем вы выполняете замену, это фактически ухудшает производительность
3. @Phil Изображения извлекаются из API. Так что, к сожалению, я никак не могу изменить это на стороне сервера
Ответ №1:
Это так же просто, как использовать цикл:
var i;
for ( i = 1; i <= 10; i )
{
$('img[src="http://www.example.com/dir/images/dir/' i '.gif"]').attr('src','http://cdn.example.com/dir/' i '.gif');
}
Или вы просили найти и заменить для всех?
Вы могли бы использовать attr начинается с селектора:
$('img[src^="http://www.example.com/"]').each(function(index,element){
var $this, src, newSrc;
$this = $(this);
src = $this.attr('src');
//do your replacement here
newSrc = src.replace('www.example.com/dir/images/dir', 'cdn.example.com/dir');
$this.attr('src', newSrc);
});
как указал Моин Заман, attr также может принимать функцию в качестве параметра, что сокращает этот скрипт до:
$('img[src^="http://www.example.com/"]').attr('src', function(index, src){
return src.replace('www.example.com/dir/images/dir', 'cdn.example.com/dir');
});
Комментарии:
1. Использование цикла для этого является излишним. селектор атрибутов лучше, но вам не нужен. каждый
2. @zzzzBov Спасибо. Имена изображений являются случайными. Может быть что угодно, поэтому первый вариант не будет работать. Что касается второго варианта, можете ли вы объяснить мне img[src ^=» ? Почему я должен включать ^ ?
3. @jQuerybeast посмотрите на мой ответ ниже для объяснения ^= и лучшего способа сделать то, что вы хотите
4. @zzzzBov возможно ли, что я также могу изменить расширение, сэр? Заранее спасибо. Из gif в png
Ответ №2:
Для замены материала вам нужен метод JavaScript .replace() с регулярными выражениями.
в jQuery селектор атрибута ^=
означает поиск значения атрибута, начинающегося с.
Попробуйте это, я предполагаю, что это все изображения, которые начинаются с ‘www.example.com ‘:
$('img[src^="http://www.example.com/dir/images/dir"]').attr('src',
function(i,src){
return src.replace('example.com/dir/images/dir','cdn.example.com/dir')
});
Комментарии:
1. Голосование против было не от меня. Спасибо за ваш ответ. Я буду проверять это через некоторое время.