Я создаю простой скрипт поиска и замены, который находит большую версию изображения, если он существует в том же каталоге.
Я не могу понять, что это правильно или, похоже, не работает.
Если у меня есть небольшое изображение, я хочу, чтобы jQuery заменил его более крупной версией.
Пример небольшого изображения:
<img src="/images/sub/1234S.jpg"/>
Пример большого изображения, чтобы заменить небольшую версию:
<img src="/images/sub/1234L.jpg" />
Итак, все, что нужно, это просто заменить "S" на "L", это относительное значение во всех моих изображениях. Это всегда последний символ url перед расширением файла.
Я не ищу "массовую" замену "S" на "L", поскольку некоторые предоставленные имена файлов содержат буквы "L" и "S" внутри. Это только последний символ.
У меня есть это до сих пор, что добавляет "L" до конца... но я не могу вычеркнуть "S".
var imageType = images[i].src.substr(-4);
var imageName = images[i].src.substr(0, images[i].src.length - 4);
imageName += "L" + imageType;
Я попытался использовать "срез", но не смог заставить его работать. Любые идеи я был бы очень благодарен.
Вы можете использовать регулярное выражение для замены 'S' для 'L'
"/images/sub/1234S.jpg".replace(/S.jpg$/, 'L.jpg')
Пытаться
var len = images[i].src.lastIndexOf('.');
var imageType = images[i].src.substr(len);
imageName = images[i].src.substr(0,len-1)+'L'+imageType;
Если вы уверены, что все ваши изображения имеют 3-буквенное расширение, вы можете сделать это следующим образом:
var imageType = images[i].src.substr(-4);
var imageName = images[i].src.substr(0, images[i].src.length - 5);
imageName += "L" + imageType;
(Basicaly, просто заменив ...images[i].src.length - 4...
с ...images[i].src.length - 5...
)
Для более "надежного" решения (например, для учета нескольких типов файлов и длины расширения) вы можете использовать регулярное выражение:
var regex = /S(\.[^\.]+)$/;
...
images[i].src.replace(regex, "L" + "$1");
...
var imagePath = images[i].src;
var imageType = imagePath.src.substr(-4);
var withoutExtension = ID.substring(imagePath.lastIndexOf(".") + 1);
var final = withoutExtension + "S" + imageType ;
Учитывая HTML:
<img src="/images/sub/1234L.jpg" />
И презумпция, которую вы хотите изменить между большими и маленькими изображениями в событии click-event:
$('img').on('click', function(){
$(this).prop(function(i,s){
return s.replace(/(S|L)\.jpg$/,function(a){
console.log(a);
return (a === 'S' ? 'L' : 'S') + '.jpg';
});
});
});