Мой google-fu подводит меня в этом. У меня есть html-страница с серией div, подобных приведенной ниже, вкрапленной среди других html:
<div class="featureImage" style="background-image:url('defaultBackground');">
<a href="linkHere" style="background:url('realBackground') no-repeat center center;"> </a>
</div>
Я обнаружил, что эти изображения функций (realBrackground) не загружаются предварительно, поэтому они загружаются только тогда, когда отображается вкладка, которая их отображает. Что я действительно хотел бы сделать, так это предварительно загрузить их jquery в фоновом режиме после отображения страницы document.ready(), чтобы, когда пользователь нажимает на другую вкладку, отображение изображения функции было мгновенным, но загрузка не будет замедлить отображение начальной страницы.
Селектор jquery, который я разработал, был $(".featureImage > a").css("background-image")
, но как я мог его закодировать, чтобы он проходил и находил все его экземпляры и фактически предварительно загружал изображение после рендеринга страницы?
ОБНОВЛЕНИЕ:
Я получил ответ с помощью Предварительная загрузка изображений jquery и Краткий совет по jQuery: извлечение фонового изображения CSS
Суть заключалась в том, что селектор .css работает только с первым найденным совпадением, и это меня раздражало. Вот что у меня получилось, хотелось бы улучшений!
<script>
function extractUrl(input)
{
// remove quotes and wrapping url()
return input.replace(/"/g,"").replace(/url\(|\)$/ig, "");
}
function preloadImages(list) {
var img;
if (!preloadImages.cache) {
preloadImages.cache = [];
}
for (var i = 0; i < list.length; i++) {
img = new Image();
img.src = list[i];
preloadImages.cache.push(img);
}
}
jQuery(document).ready(function() {
var items = new Array();
$(".featureImage > a").each(function() {
items.push(extractUrl($(this).css("background-image")));});
preloadImages(items);
});
</script>
Вкратце: мне пришлось разбить свой селектор на две части и использовать функцию each(), чтобы просмотреть и найти все элементы, которые я хотел, извлечь URL-адреса и поместить их в массив. После того, как у меня был массив, предыдущие ответы на переполнение стека помогли мне дойти до конца.