Что не так с кодом? Если сказать проще, то элемент не записывается в переменную, а так как элементов несколько, то должен образоваться массив, а он образовуется пустым.
var zoombox = $("<div class='popup'></div>");
var underlay = $("<div class='underlayer'></div>");
var imageBox = $("<div class='imgContent'></div>");
var opengal = $(".expand");
var targetImage = $(".midkar");
var zoomedImage = targetImage.clone();
var currentButton;
var currentImage;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
Opengal и targetImage являются массивами (по 5 элементов в каждом (5 кнопок и 5 изображений))
Но с другими переменными все в порядке.
$(".expand") в консоли даёт иной результат?
@vp_arth Да, если так ввести, то оно верно отбирает элементы.
Это говорит о том, что на момент инициализации переменной opengal, в DOM элементов ещё не было.
Попробуйте перенести код ближе к концу страницы, например, перед закрывающим тегом </body>.
Также может помочь вынос этого кода на следующий тик событийного цикла:
var opengal;
setTimeout(function(){
opengal = $(".expand");
}, 0);
Однако этот вариант не даёт гарантий, DOM не обязан прогружаться синхронно.
Для объективности, приведу комментарий из обсуждения:
Очевидно, у вас элементы в дереве появляются уже после того как ваш код отработает. Найдите кто их добавляет - и перетащите ваш код туда. – Pavel Mayorov 1 час назад
Сборка персонального компьютера от Artline: умный выбор для современных пользователей