jQuery объекты не являются элементами DOM, они устанавливают элементов DOM.
Чтобы установить атрибут для всех элементов в наборе, используйте attr
: element1.attr("id", "imgClickAndChange")
Чтобы задать свойство, используйте prop
: element1.prop("id", "imgClickAndChange")
(id
оказываетсясвойство, отражающее атрибут id
; src
также является атрибутом и отраженным свойством).
Чтобы добавить обработчик событий, используйте on
: element1.on("click", changeImage)
.
Как правило, методы setter в jQuery устанавливают их для всех элементов набора, а методы getter получают из первый элемент в наборе (но есть исключения).
Если по какой-либо причине вам необходим прямой доступ к элементу (ам) DOM в наборе, вы можете сделать это с помощью скобокобозначения, как с массивом.
Подробнее в API документах и в учебном центре .
Согласно вашему HTML, здесь у вас есть ошибка:
element1 = $('.to_change_inner').children('img'); //find() also doesn't work
Комментарий неправильный, find
будет тем, что вы хотите, а не children
:
var element1 = $('.to_change_inner').children('img'); // Doesn't work
console.log(element1.length); // 0, no matching elements
var element1 = $('.to_change_inner').find('img'); // Works
console.log(element1.length); // 1, there was a matching element
<div class="single-image text-center to_change_inner">
<div class="content">
<div class="single-image-container">
<img class="img-responsive" src="https://picsum.photos/200/300">
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Этот код, кажется, также становится жертвой того, что я называю Ужас неявных глобалов , вам нужнообъявить element1
.