2015-06-30 2 views
6

У меня есть html-фрагмент, возвращаемый через ajax. Фрагмент является тегом <img>.Получить изображение src без загрузки изображения?

<img src="image.jpg" /> 

мне нужно, чтобы извлечь значение атрибута src без загрузки изображения на начальном этапе. Причиной этого является атрибут src, содержащий частичный путь, который мне нужно манипулировать в приложении, чтобы правильно загрузить изображение.

У меня есть следующий код в настоящее время извлечения атрибута src:

var src = $(value).attr('src'); 

Однако, это вызывает изображение для загрузки, в результате чего в 404. Я хотел бы избежать этого ненужного запроса.

Как извлечь значение атрибута src, не заставляя браузер загружать изображение?

+0

Если вы не хотите загружать изображение, зачем даже создавать элемент img? Просто создайте строку в скрипте со значением. –

+0

Верните свой сервер ''. Затем, с помощью jQuery, получите 'data-src', обработайте его и верните его как' src'. – blex

+0

У меня нет контроля над концом сервера. Я просто получаю произвольный фрагмент тега img как часть запроса ajax. –

ответ

1

Вы можете просто удалить атрибут после доступа к нему.

Это не загрузит неверное изображение, как вы можете подтвердить в консоли:

var s= $('<img src="invalidURL.jpg">'), 
 
    src= s.attr('src'); 
 

 
s.removeAttr('src'); 
 
console.log(src);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Удалить removeAttr(), и будет попытки загрузить изображение.

+0

Интересно. Это полезно. Благодаря! –

2

Ваш лучший выбор, вероятно, для вывода тега данных на изображение. Затем вы можете манипулировать этим с помощью jQuery, а затем использовать его для записи конечного пути изображения.

Так что вы могли бы сделать что-то подобное в вашем HTML:

<img data-img-src="abc.jpg" class="my-image" /> 

Затем в JQuery:

var path = $('.my-image').data('img-src'); 
console.log(path); // Do something here, then write the new path with: 
$('.my-image).attr('src', new_path); 

EDIT: Извините, я просто перечитала бит, где он идет через AJAX , В этом случае вы, вероятно, можете использовать обратный вызов данных вашего запроса ajax, чтобы удалить src из изображения.

+0

Это была моя первая мысль, но у меня нет контроля над сервером, чтобы контролировать, что такое имя атрибута. –

+0

Я полагаю, что я мог бы сделать замену в строке имени атрибута, прежде чем загружать его в jquery ... –

+0

Извините, я просто перечитал этот бит. Я обновлю ответ. –

2

Я решил это, изменив имя атрибута src, прежде чем загружать его в jquery.

value = value.replace('src', 'data-src'); 
var src = $(value).attr('data-src'); 

Выполнение этого позволяет мне извлечь значение, не заставляя браузер пытаться загрузить изображения.

+0

Я был бы поражен, если бы изображение не загрузилось, по крайней мере, при загрузке, если вы можете использовать '.attr()' на нем. Это означает, что он создал объект «Image» и имеет на нем свойство '.src'. –

+0

Правильно, вот что вызвало первоначальную попытку загрузки. заменив имя атрибута, элемент больше не имеет атрибута src, и поэтому он больше не пытается загрузить изображение. –

1

Если у вас просто есть строка, например <img src="image.jpg" />, почему вы не собираетесь использовать регулярное выражение?

Нечто вроде: /[\"\'][a-z0-9A-Z\.]*/. PS: У меня много навыков регулярного выражения, поэтому вы можете манипулировать им соответствующим образом.

2
$.ajax('someURL.html', function(data){ 
    var html = data.replace(/\ssrc/g, ' data-src'), 
     img = $(html), 
     src = 'some/path/' + img.data('src'); 
    img.attr('src', src); 
    $('#container').append(img); 
}); 
1

Использование

var string = '<img src="image.png">'; 

var matches = string.match(/src\=("|')(.*?)\1/); 

console.log(matches[2]); 
Смежные вопросы