Гладкий Максим Валерьевич / github:MaksHladki
jQuery — библиотека JavaScript, фокусирующаяся на взаимодействии JavaScript и HTML. Библиотека jQuery помогает легко получать доступ к любому элементу DOM, обращаться к атрибутам и содержимому элементов DOM, манипулировать ими. Также библиотека jQuery предоставляет удобный API для работы с AJAX
Desktop
Mobile
Удалено:
<!DOCTYPE html>
<html>
<head>
<title>jQuery Hello World</title>
</head>
<body>
<script src="jquery-3.3.1.min.js"></script>
</body>
</html>
Использование CDN
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
jQuery(document).ready(function(){
// code
});
$(document).ready(function(){
// code
});
$(function(){
// code
});
Шаблон | Описание | Пример |
---|---|---|
$('*') | выборка всех элементов страницы | $('*').css('color', 'red') |
$('element') | выборка всех элементов с данным именем тега | $('img') |
$('#id') | выборка элемента с данным значением атрибута id | ('#btn1') |
$('.class') | выборка всех элементов с данным значением атрибута class | $('.btn') |
$('selector1, selector2') | выборка всех элементов, соответствующих указанным селекторам | $('body, .btn') |
Шаблон | Описание | Пример |
---|---|---|
$(selector1 > selector2) | выборка элементов, которые соответствуют второму селектору и являются дочерними для элементов первого | $('#menu > a') |
$(selector1 + selector2) | выборка элементов со вторым селектором, которые располагаются непосредственно за элементами первого | $('.closed + .open') |
$(selector1 ~ selector2) | выборка элементов со вторым селектором, которые располагаются на одном уровне с элементами первого | $('.closed ~ .open') |
Шаблон | Описание | Пример |
---|---|---|
[attr] | выборка элементов с атрибутом attr | $("a[class]") |
[attr='value'] | выборка элементов, у которых значение attr равно value | $("a[class='redStyle']") |
[attr^='value'] | выборка элементов, у которых значение attr начинается со строки value | $("a[class^='red']") |
[attr$='value'] | выборка элементов, у которых значение attr оканчивается на строку value | $("a[class$='Style']") |
[attr~='value'] | выборка элементов, у которых attr имеет список значений, разделенных пробелом, и одно из этих значений равно value | $("a[class~='redStyle']") |
[attr *= 'value'] | выборка элементов, у которых значение атрибута attr имеет подстроку value | $("a[class *= 'Style']") |
[attr|='value'] | выборка элементов, у которых значение атрибута attr представляет либо значение value, либо список значений, разделенных дефисами, и первое значение в этом списке равно value | $("a[class|='red']") |
Фильтр | Описание |
---|---|
:eq(n) | выбирает n-й элемент выборки |
:even | выбирает элементы с четными номерами |
:odd | выбирает элементы с нечетными номерами |
:first | выбирает первый элемент выборки |
:last | выбирает последний элемент выборки |
:gt(n) | выбирает все элементы с номером, большим n |
:lt(n) | выбирает все элементы с номером, меньшим n |
:header | выбирает все заголовки (h1, h2...) |
:not(селектор) | выбирает все элементы, которые не соответствуют селектору |
Фильтр | Описание |
---|---|
:contains('text') | получает все элементы, которые содержат текст text.. |
:has('селектор') | получает все элементы, которые содержат хотя бы один дочерний элемент, соответствующий селектору |
:empty | получает все элементы, которые не имеют дочерних элементов |
:first-child | получает все элементы, которые являются первыми дочерними элементами в своих родителях |
:last-child | получает все элементы, которые являются последними дочерними элементами в своих родителях |
:nth-child(n) | получает все элементы, которые являются n-ными элементами в своих родителях (нумерация идет с единицы) |
:nth-child(even) | получает все элементы, которые являются четными элементами в своих родителях (нумерация идет с единицы) |
:nth-child(odd) | получает все элементы, которые являются нечетными элементами в своих родителях (нумерация идет с единицы) |
:only-child | получает все элементы, которые являются единственными дочерними элементами в своих родителях |
:parent | получает все элементы, которые имеют, как минимум, один дочерний элемент |
Фильтр | Описание |
---|---|
:button | получает все элементы button и элементы input с типом button |
:checkbox | получает все элементы checkbox |
:checked | получает все отмеченные элементы checkbox и radio |
:disabled | получает все элементы, которые находятся в неактивном состоянии |
:enabled | получает все элементы, которые находятся в активном состоянии |
:file | получает все элементы file |
:input | получает все элементы input |
:hidden | получает все скрытые элементы |
:password | получает все элементы password |
:radio | получает все элементы radio |
:reset | получает все элементы reset |
:selected | получает все отмеченные элементы option |
:submit | получает все элементы input с типом submit |
:text | получает все элементы input с типом text |
:visible | получает только видимые элементы |
.find(селектор) | поиск в выборке объектов, соответствующих селектору |
.find(элемент) | поиск в выборке объектов, соответствующих данному элементу html |
.find(jQuery) | поиск в выборке объектов, соответствующих объекту jQuery |
.children([selector]) | возвращает набор элементов, состоящий из прямых потомков каждого элемента исходного набора |
.closest(selector[,context]) | возвращает ближайшего родителя, соответствующему селектору |
.next([selector]) | получает следующий элемент, находящийся на одном уровне с текущим |
.nextAll([selector]) | получает все следующие элементы одного уровня по отношению к текущему |
.prev([selector]) | получает предыдущий элемент по отношению к текущему |
.prevAll([selector]) | получает все предыдущие элементы по отношению к текущему |
.siblings([selector]) | позволяет получить все элементы уровня, на котором находится текущий (комбинация nextAll и prevAll) |
.parent([selector]) | получение родителя элемента |
<!DOCTYPE>
<html>
<head>
<title>Jquery</title>
</head>
<body>
<section id="news" class="news">
<div id="article_main" class="article" data-article-id="47">
<div class="header">
<p>article #2</p>
</div>
<div class="body">
<p>Hello</p>
</div>
</div>
<div class="article" data-article-id="101">
<div class="header">
<p>article #2</p>
</div>
<div class="body">
<p>Hey</p>
</div>
</div>
</section>
<script src="jquery-3.3.1.min.js"></script>
</body>
</html>
$(function () {
var newsElement = $('#news');
console.log(newsElement);
});
$(function () {
var newsElement = $('.news');
console.log(newsElement);
});
$(function () {
var headers = $('.header');
console.log(headers);
for(let header of headers){
console.log(header);
}
});
$(function () {
var headers = $('#article_main .header');
console.log(headers);
$.each(headers, (index, value) => {
console.log(value);
});
});
$(function () {
var articles = $('#news > .article');
console.log(articles);
});
$(function () {
var headers = $('#news > .header');
console.log(headers);
});
$(function () {
var elements = $('div[class*="eade"]');
console.log(elements);
});
$(function () {
var article = $('*[data-article-id="101"]');
console.log(article);
var articleId = article.data("article-id");
console.log(articleId);
});
$(function () {
var article = $('.article:eq(1)');
console.log(article);
});
$(function () {
var articles = $('.article:not(#article_main)');
console.log(articles);
});
$(function () {
var body = $('.body:last');
console.log(body);
});
$(function () {
var body = $('.article .body>p:contains("Hey")').parent()[0];
console.log(body);
});
$(function () {
var articles = $('div').filter(function(){
return $(this).hasClass('article');
});
console.log(articles);
});
$(function () {
var articles = $('.article');
var headers = articles.find('.header');
console.log(headers);
});
$(function () {
var article = $('#article_main');
console.log(article.children());
});
$(function () {
var article = $('#article_main');
console.log(article.children('.body'));
});
$(function () {
var pharagraps = $('.header > p');
console.log(pharagraps.closest('.news'));
});
$(function () {
var mainArticle = $('#article_main');
console.log(mainArticle.next()[0]);
});
$(function () {
var mainArticle = $('#article_main');
var secondArticle = $('.article[data-article-id="101"]');
console.log(secondArticle);
console.log(mainArticle.siblings(secondArticle)[0]);
});
$(function () {
var mainArticle = $('#article_main');
//нет родителя с тегом body
console.log(mainArticle.parent('body'));
console.log(mainArticle.parent());
});
.attr(attrName) | возвращает значение атрибута первого элемента в наборе |
.attr(attrName, value) | присваивает новое значение атрибуту у всех выбранных элементов |
.attr({attrName1:value1, attrName2:value2, ...}) | присваивает новые значения группе атрибутов |
.attr(attrName, function(index, value)) | присваивает атрибуту значение, возвращаемое функцией. Index — позиция элемента в наборе |
.removeAttr(attrName) | удаляет атрибут у выбранных элементов |
.prop(propName) | возвращает значение свойства. Если выбрано несколько элементов, то значение будет взято у первого |
.prop(propName, value) | присваивает новое значение свойству у всех выбранных элементов |
.prop({propName1:value1, propName2:value2, ...}): | присваивает новые значения группе свойств |
.prop(propName, function(index, value)) | присваивает свойству значение, возвращаемое функцией |
.removeProp(propName) | удаляет свойство у выбранных элементов |
В HTML5 была введена такая функциональность, как пользовательские атрибуты. Их суть в том, что программист может применить к элементу дополнительные атрибуты, которые будут хранить некоторое дополнительное значение. Подобные атрибуты начинаются с префикса data-, после которого идет собственно название атрибута и его значение
Если выбрано несколько элементов, то функция будет работать только с первым из них
.data() | возвращает все пользовательские атрибуты в виде объекта |
.data(name) | возвращает значение пользовательского атрибута |
.data(name,value) | присваивает новое значение пользовательскому атрибуту |
.data(obj) | присваивает новые значения группе атрибутов |
.height() | возвращает/задает высоту элемента |
.offset() | получает/задает координаты элемента на странице |
.outerHeight() | возвращает высоту элемента (включая заполнение и границу) |
.outerWidth() | возвращает ширину элемента с учетом внутренних отступов, границы и внешних отступов |
.position() | получает значение позиции элемента top и left относительно отступов его родителя |
.width() | получает/задает ширину элемента |
.css(property) | получает значение css-свойства |
.css(property, value) | устанавливает для всех выбранных элементов css-свойство |
.css(property, function(index, value)) | присваивает css-свойству значение, возвращаемое функцией |
.css(obj) | присваивает новые значения группе css-свойств |
.addClass() | добавляет класс(ы) выбранным элементам страницы |
.hasClass(className) | проверяет наличие класса у выбранных элементов |
.removeClass(className) | удаляет заданные классы у элементов |
.toggleClass(className) | добавляет или удаляет заданный класс(ы) по принципу переключателя |
.html() | получает разметку html первого элемента в наборе |
.html(htmlString) | устанавливает в качестве разметки элемента код html, переданный в качестве параметра |
.html(function(index, oldhtml) | устанавливает разметку с помощью функции |
.text() | получает текст первого элемента в наборе |
.text(text) | устанавливает в качестве текста элемента строку, переданную в качестве параметра |
.text(function(index, text)) | устанавливает текст с помощью функции |
<!DOCTYPE>
<html>
<head>
<title>Jquery</title>
</head>
<body>
<section id="news" class="news">
<div id="article_main" class="article" data-article-id="47" data-type="Main">
<div class="header">
<p>article #2</p>
</div>
<div class="body">
<textarea rows="2" cols="60">Hello</textarea>
<input type="checkbox" checked="checked">
</div>
</div>
<div class="article" data-article-id="101" data-type="Option">
<div class="header">
<p>article #2</p>
</div>
<div class="body">
<textarea rows="2" cols="60">Hey</textarea>
<input type="checkbox" checked="checked">
</div>
</div>
</section>
<script src="jquery-3.3.1.min.js"></script>
</body>
</html>
$(function () {
var article = $('#article_main');
console.log(article.attr('class'));//article
article.attr('class', 'article-new');
console.log(article.attr('class'));//article-new
article.removeAttr('class');
console.log(article.attr('class'));//undefined
});
$(function () {
var article = $('#article_main');
console.log(article.prop('class'));//article
article.attr('class', 'article-new');
console.log(article.prop('class'));//article-new
article.removeProp('class');
console.log(article.prop('class'));//article-new
});
$(function () {
var checkbox = $('.article input[type="checkbox"]');
console.log(checkbox.prop('checked'));//true
checkbox.prop('checked', false);
console.log(checkbox.prop('checked'));//false
checkbox.removeProp('checked');
console.log(checkbox.prop('checked'));//false
});
$(function () {
var checkbox = $('.article input[type="checkbox"]');
console.log(checkbox.prop('custom'));//undefined
checkbox.prop('custom', 1000);
console.log(checkbox.prop('custom'));//1000
checkbox.removeProp('custom');
console.log(checkbox.prop('custom'));//undefined
});
$(function () {
var article = $('.article').eq(1);
console.log(article.data());
article.data('article-id', 1000);
console.log(article.data('article-id'));
article.data({articleId : 1, text : ["Hello", "World"]});
console.log(article.data());
});
$(function () {
var article = $('#article_main');
console.log(article.css('margin'));//0px
article.css('margin-left', 10);
console.log(article.css('margin'));//0px 0px 0px 10px
article.css('color', function (index, oldValue) {
return oldValue == 'rgb(0, 0, 0)'
? 'yellow'
: 'black';
});
});
$(function () {
var article = $('#article_main');
console.log(article.height());//72
console.log(article.width());//1288
article.height(article.height() + 100);
article.width(article.width() + 100);
console.log(article.height());//172
console.log(article.width());//1388
});
$(function () {
var article = $('#article_main');
console.log(article.attr('class')); //article
article.addClass('class1 class2');
console.log(article.attr('class')); //article class1 class2
article.toggleClass('class1 class3');
console.log(article.attr('class')); //article class2 class3
console.log(article.hasClass('class1'));//false
console.log(article.hasClass('article'));//true
console.log(article.hasClass('article class2'));//true
article.removeClass('article class3');
console.log(article.attr('class')); //class2
});
$(function () {
var article = $('#article_main');
console.log(article.offset()); //left: 8; top: 8;
console.log(article.position());//left: 8; top: 8;
article.css({
'margin' : '10px',
'paddign': '10px'
});
console.log(article.offset()); //left: 18; top: 16;
console.log(article.position());//left: 8; top: 6;
});
$(function () {
var article = $('#article_main');
console.log(article.offset()); //left: 8; top: 8;
article.offset({
left: 100,
top: 100
});
console.log(article.offset()); //left: 100; top: 100;
});
$(function () {
var header = $('#article_main .header > p');
console.log(header.text());
header.text('^_^');
console.log(header.text());
console.log(header.parent()[0]);
});
$(function () {
var header = $('#article_main .header');
console.log(header.html());// article #2
header.html('Habr');
console.log(header.html());
// Habr
});
.append(htmlString) | вставляет указанную разметку html в конец элемента выборки |
.append(element) | вставляет элемент в конец элемента выборки |
.append(jQuery) | вставляет объект jQuery в конец элемента выборки |
.append(function(index, value)) | вставляет элемент в конец элемента выборки с помощью функции |
.prepend(htmlString) | вставляет указанную в параметре разметку html в начало элемента выборки |
.prepend(element) | вставляет элемент в начало элемента выборки |
.prepend(jQuery) | вставляет объекта jQuery в начало элемента выборки |
.prepend(function (index, value)) | вставляет элемент в начало элемента выборки с помощью функции |
$(htmlString) | создает новый элемент с использованием функции jQuery |
.clone( [withDataAndEvents ] [,deepWithDataAndEvents] ) | клонирует разметку уже существующего элемента |
.appendTo(target) | добавляет объект в качестве дочернего к элементу (в конец), указанному в параметре метода |
.prependTo(target) | добавляет объект в качестве дочернего к элементу (в начало), указанному в параметре метода |
.wrap(htmlString) | обертывает элементы выборки в элемент, создаваемый из разметки |
.wrap(element) | обертывает элементы выборки в элемент html, переданный в качестве параметра |
.wrap(selector) | обертывает элементы выборки в элемент документа, соответствующий селектору |
.wrap(jQuery) | обертывает элементы выборки в объект jQuery |
.wrap(function(index, value)) | обертывает элементы выборки в объект, возвращаемый функцией |
.warpAll([htmlString| element|selector|jQuery| function]) | обертывает все элементы выборки в один элемент |
.wrapInner([htmlString| element|selector|jQuery| function]) | обертывает содержимое элементов выборки в новый элемент |
.before(htmlString) | добавляет в разметку перед каждым элементом выборки элемент, создаваемый из разметки html |
.before(element) | добавляет в разметку перед каждым элементом выборки элемент html, переданный в качестве параметра |
.before(jQuery) | добавляет в разметку перед каждым элементом выборки объект jQuery |
.before( function(index, value)) | добавляет в разметку перед каждым элементом выборки объект, возвращаемый функцией |
.after(htmlString) | добавляет после каждого элемента выборки элемент, создаваемый из разметки html |
.after(element) | добавляет после каждого элемента выборки элемент html, переданный в качестве параметра |
.after(jQuery) | добавляет после каждого элемента выборки объект jQuery |
.after( function(index, value)) | добавляет после каждого элемента выборки объект, возвращаемый функцией |
.insertBefore(htmlString) | элемент добавляется перед элементом, создаваемым из разметки html |
.insertBefore(element) | элемент добавляется перед элементом html, который передается в качестве параметра |
.insertBefore(jQuery) | элемент добавляется перед объектом jQuery |
.insertBefore(selector) | элемент добавляется перед объектом, который соответствует селектору |
.insertAfter(htmlString) | элемент добавляется после элемента, создаваемого из разметки html |
.insertAfter(element) | элемент добавляется после элемента html, который передается в качестве параметра |
.insertAfter(jQuery) | элемент добавляется после объекта jQuery |
.insertAfter(selector) | элемент добавляется после элемента, который соответствует селектору |
.replaceWith(htmlString| jQuery|element|function) | замещает внутренне содержимое элемента новым содержимым |
.replaceAll(htmlString| jQuery|element|function) | замещает все элементы, определенные в параметре, новым элементом |
.remove([selector]) | удаляет элементы из структуры DOM |
.detach() | аналогичен методу remove, но при удалении объекта сохраняются все связанные с ним данные |
.empty() | очищает содержимое элементов, делая их пустыми |
<!DOCTYPE>
<html>
<head>
<title>Jquery</title>
</head>
<body>
<section id="news" class="news">
<div class="article">
<div class="header">
<p>article #1</p>
</div>
<div class="body">
<textarea rows="2" cols="60">Hello</textarea>
</div>
</div>
</section>
<script src="jquery-3.3.1.min.js"></script>
</body>
</html>
$(function () {
var article = $(
`
`
);
$('#news').append(article);
});
$(function () {
var template =
`
`;
$(template).appendTo($('#news'));
});
$(function () {
var article = $('.article');
var clone = article.clone();
console.log(clone[0]);
});
$(function(){
var textarea = $('textarea');
textarea.wrap('');
console.log(textarea.parent()[0]);
});
$(function(){
var paragraph = $('.header > p');
paragraph.wrapInner('');
console.log(paragraph[0]);
});
$(function(){
var paragraph = $('.header > p');
var dateItem = document.createElement('span');
dateItem.className = 'date';
dateItem.innerHTML = '01.03.2017';
paragraph.before(dateItem);
console.log(paragraph.parent()[0]);
});
$(function(){
var paragraph = $('.header > p');
var template = '01.03.2017';
$(template).insertAfter(paragraph);
console.log(paragraph.parent()[0]);
});
$(function(){
var template = `
(@_@)
`;
$('.article').replaceWith(template);
console.log($('body').children().get(0));
});
$(function(){
var article = $('.article');
article.find('.header').remove();
article.find('.body').empty();
console.log(article.get(0));
});
Метод bind добавляет обработчики событий только к тем элементам, которые на момент его действия уже существуют в структуре DOM
.bind(eventType [, eventData ], handler)
$(function(){
$('button').bind('click', function(){
console.log('Обработчик события click');
//получение доступа к елементу через $(this)
console.log($(this).html());
});
});
.unbind(eventType [, handler ])
$(function(){
$('button').bind('click', function(e){
console.log('Обработчик события click');
});
$('button').unbind();
// или
$('button').unbind('click');
});
.one(events [, data ], handler)
$(function(){
$('button').one('click', function(e){
console.log('Обработчик события click');
console.log($(this).attr('class'));
});
});
.blur() | обработчик потери фокуса |
.change() | обработчик изменения заданного элемента формы |
.click() | обработчик нажатия мышью по элементу |
.focus() | обработчик получения фокуса |
.keypress() | обработчик ввода символа с клавиатуры |
.resize() | обработчик изменения размеров окна браузера |
.scroll() | обработчик "прокрутки" элементов документа |
currentTarget | текущий элемент, на котором обрабатывается событие |
data | объект, в который передаются дополнительные данные связанные с событием |
target | элемент, инициировавший событие |
timestamp | время наступления события |
pageX/pageY | координаты указателя мыши относительно верхней границы документа |
type | тип события |
which | объект, содержащий данные о нажатой клавише или кнопке |
<!DOCTYPE>
<html>
<body>
<input type="text" id="fistName">
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$(function () {
$('#fistName').bind('keydown', function (ev) {
//set 'hi'
console.log(ev.which);
//72 73 (коды символов)
});
});
</script>
</body>
</html>
<!DOCTYPE>
<html>
<body>
<input type="button" value="Click">
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$(function () {
var $elem = $('input[type="button"]');
var data = [1, 2, 3];
$elem.bind('click', data, function (ev) {
console.log(ev.data);
//[1, 2, 3]
});
});
</script>
</body>
</html>
<!DOCTYPE>
<html>
<body>
<input type="button" value="Click">
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$(function () {
$('input[type="button"]').bind('click', function (ev) {
console.log(ev.type); //click
console.log(ev.pageX);//33
console.log(ev.pageY);//16
});
});
</script>
</body>
</html>
<div>
<form>
<input type="button" name="send" value="Send">
</form>
</div>
$(function () {
$('input[type="button"]').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
$('form').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
$('div').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
});
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента INPUT
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента FORM
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента DIV
$(function () {
$('input[type="button"]').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
e.stopPropagation(); //!!!
});
$('form').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
$('div').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
});
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента INPUT
$(function () {
$('input[type="button"]').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
e.stopImmediatePropagation();
});
$('form').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
$('div').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
});
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента INPUT
$(function () {
$('input[type="button"]').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
e.preventDefault();
});
$('form').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
$('div').bind('click', function (e) {
console.log('Событие инициировал элемент ' + e.target.tagName);
console.log('Событие обрабатывается для элемента ' + e.currentTarget.tagName);
});
});
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента INPUT
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента FORM
//Событие инициировал элемент INPUT
//Событие обрабатывается для элемента DIV