Содержание
- 2. DOM
- 3. DOM DOM – Document Object Model API для работы со страницей из JavaScript. Читать информацию Создавать
- 4. DOM DOM – Document Object Model Все элементы страницы (тэги, текст, комментарии) являются элементами DOM. Часто
- 5. Навигация
- 6. Навигация Каждый DOM-элемент имеет следующие навигационные свойства: parentNode – родитель previousSubling – предыдущий сосед nextSibling –
- 7. Навигация Важные особенности: Коллекция здесь – не настоящий массив. Если какой-то элемент не определен, значение навигационного
- 8. Навигация Привет Текст... Еще абзац
- 9. Навигация Привет Текст... Еще абзац var body = document.body;
- 10. Навигация Привет Текст... Еще абзац var body = document.body; body.firstChild
- 11. Навигация [ ] Привет Текст... Еще абзац var body = document.body; body.firstChild
- 12. Навигация [ ] Привет Текст... Еще абзац [ ] var body = document.body; body.firstChild body.lastChild
- 13. Навигация [ ] Привет Текст... Еще абзац var body = document.body; var first = body.firstChild; first.nextSibling;
- 14. Навигация [ ] Привет Текст... Еще абзац var body = document.body; var first = body.firstChild; first.nextSibling.nextSibling;
- 15. Навигация [ ] Привет Текст... Еще абзац var body = document.body; var first = body.firstChild; first.nextSibling.firstChild
- 16. Навигация [ ] Привет Текст... Еще абзац var body = document.body; var first = body.firstChild; first.nextSibling.firstChild;
- 17. Навигация Существуют дополнительные навигационные свойства, не учитывающие текстовые ноды. parentElementNode firstElementChild, lastElementChild previousElementSibling, lastElementSibling children
- 18. Навигация Как работать с коллекциями (childNodes, children)? Два способа обращения к элементу: elt.childNodes[i]; elt.childNodes.item(i); Перебор –
- 19. Поиск элементов
- 20. Поиск элементов Несколько основных способов найти элемент(ы) getElementById() getElementsBy*() querySelector()/querySelectorAll()
- 21. Поиск элементов document.getElementById(‘elt-id’); Вызов – с объекта document Возвращает один элемент с указанным id или null
- 22. Поиск элементов anyElement.getElementsBy*(‘query’); Вызов – с любого элемента. Это ограничивает область поиска Варианты: ByName ByClassName ByTagName
- 23. Поиск элементов anyElement.querySelector(‘#css .selector’); Вызов – с любого элемента. Это ограничивает область поиска Возвращает один первый
- 24. Поиск элементов anyElement.querySelectorAll(‘#css .selector’); Вызов – с любого элемента. Это ограничивает область поиска Возвращает коллекцию элементов
- 25. Поиск элементов Разница между getElementsBy* и querySelectorAll Оба метода возвращают коллекцию, но их действие не равнозначно.
- 26. Поиск элементов Первый Второй liveCol = document.getElementsByTagName(‘p’); col = document.querySelectorAll(‘p’);
- 27. Поиск элементов liveCol = document.getElementsByTagName(‘p’); col = document.querySelectorAll(‘p’); liveCol.length; // 2 col.length; // 2
- 28. Поиск элементов liveCol = document.getElementsByTagName(‘p’); col = document.querySelectorAll(‘p’); document.body.innerHTML = ‘’; // удалит все из body
- 29. Поиск элементов liveCol = document.getElementsByTagName(‘p’); col = document.querySelectorAll(‘p’); document.body.innerHTML = ‘’; // удалит все из body
- 30. Атрибуты
- 31. Атрибуты Для работы с атрибутами у каждого элемента есть следующие методы: getAttribute(‘name’); setAttribute(‘name’, ‘value’); hasAttribute(‘name’); removeAttribute(‘name’);
- 32. Атрибуты Особенности: Значения атрибутов – строки. Все что не строки – конвертируется в строку Имена атрибутов
- 33. Атрибуты Атрибуты и свойства Элементы это объекты. Как и у любого объекта, у элементов есть свойства
- 34. Атрибуты var elt = document.getElementById(‘some’); elt.id; // ‘some’ elt.getAttribute(‘id’); // ‘some’
- 35. Атрибуты var elt = document.getElementById(‘some’); elt.id = “foo”; elt.getAttribute(‘id’); // ‘foo’ elt.outerHTML; // ‘ ’
- 36. Атрибуты Не все атрибуты и свойства синхронизируются var elt = document.getElementsByTagName(‘input’)[0]; elt.value; // ‘foo’ elt.getAttribute(‘value’); //
- 37. Атрибуты Не все атрибуты и свойства синхронизируются var elt = document.getElementsByTagName(‘input’)[0]; elt.value = ‘bar’; elt.getAttribute(‘value’); //
- 38. Модификация дерева
- 39. Модификация дерева Можно создавать ноды дерева var div = document.createElement(‘div’); var text = document.createTextNode(‘Это текстовая нода’);
- 40. Модификация дерева Можно добавлять ноды в другие ноды div.appendChild(text); document.body.appendChild(div);
- 41. Модификация дерева Можно читать что получилось в виде строки: document.body.innerHTML; Это текстовая нода
- 42. Модификация дерева Можно читать что получилось в виде строки: document.body.outerHTML; Это текстовая нода
- 43. Модификация дерева Создавать содержимое документа можно с помощью innerHTML. document.body.innerHTML = “ Параграф текста ”; «Перезапись»
- 44. Модификация дерева Можно управлять местом вставки parent.insertBefore(elem, nextSibling); parent.replaceChild(newElem, elem);
- 45. Модификация дерева insertBefore
- 46. Модификация дерева insertBefore var ref = document.getElementById(‘ref’); var newDiv = document.createElement(‘div’); document.body.insertBefore(newDiv, ref);
- 47. Модификация дерева insertBefore var ref = document.getElementById(‘ref’); var newDiv = document.createElement(‘div’); document.body.insertBefore(newDiv, ref);
- 48. Модификация дерева Если указать последний параметр null – вставка будет эквивалентна appendChild. insertBefore(newChild, null) == appendChild(newChild)
- 49. Модификация дерева replaceChild var ref = document.getElementById(‘ref’); var newDiv = document.createElement(‘div’); document.body.replaceChild(newDiv, ref);
- 50. Модификация дерева replaceChild var ref = document.getElementById(‘ref’); var newP = document.createElement(‘p’); document.body.replaceChild(newDiv, ref);
- 51. Модификация дерева Элементы можно удалять методом removeChild var ref = document.getElementById(‘ref’); document.body.removeChild(ref);
- 52. Модификация дерева Элементы можно удалять методом removeChild var ref = document.getElementById(‘ref’); document.body.removeChild(ref);
- 53. Модификация дерева Элементы можно клонировать методом cloneNode Абзац var p = document.body.firstElementChild; var pClone = p.cloneNode();
- 54. Модификация дерева Элементы можно клонировать методом cloneNode var p = document.body.firstElementChild; var pClone = p.cloneNode(); document.body.appendChild(pClone);
- 55. Модификация дерева Элементы можно клонировать методом cloneNode var p = document.body.firstElementChild; var pClone = p.cloneNode(); document.body.appendChild(pClone);
- 56. Модификация дерева Элементы можно клонировать методом cloneNode var p = document.body.firstElementChild; var pClone = p.cloneNode(true); document.body.appendChild(pClone);
- 57. События
- 58. События DOM Events. События. Какие они бывают?
- 59. События DOM Events. События. Какие они бывают? Click Mousedown, Mousemove Focus Keydown, Keyup Sumbit
- 60. События Как добавить обработчик события. ... p.onclick=function() { alert(‘Нажали на текст’); };
- 61. События Как добавить обработчик события. function handleClick() { ... }; ... p.onclick=handleClick;
- 62. События ... p.onclick=handleClick; p.setAttribute(‘onclick’, handleClick);
- 63. События ... p.onclick=handleClick; p.setAttribute(‘onclick’, handleClick);
- 64. События p.onclick = f1; p.onclick = f2;
- 65. События p.onclick = f1; p.onclick = f2; Проблема. Второй обработчик «затрет» первый!
- 66. События addEventListener! p.addEventListener(‘click’, f1); p.addEventListener(‘click’, f2);
- 67. События Обратите внимание! p.onclick = ... p.addEventListener(‘click’, ...); При навешивании через атрибут нужно добавить on!
- 68. События elt.addEventListener vs elt.on* Позволяет добавить несколько обработчиков Есть события, которые нельзя добавить через свойство/разметку. Можно
- 69. События Как удалить обработчик? elt.onclick = null; elt.removeEventListener(‘click’, f);
- 70. События elt.addEventListener(‘click’, function() { doSmth(); }); elt.removeEventListener(‘click’, function() { doSmth();});
- 71. События elt.addEventListener(‘click’, function() { doSmth(); }); elt.removeEventListener(‘click’, function() { doSmth();});
- 72. События Важно! Требуется указывать всегда одну и ту же функцию! function handler() { doSmth(); } elt.addEventListener(‘click’,
- 73. Объект события
- 74. Объект события p.onclick = function(event) { // event??? }
- 75. Объект события Объект-дескриптор события. Содержит свойства и методы, позволяющие получить дополнительную информацию о событии, управлять им
- 76. Объект события event.type – тип события (click, mousedown, keyup, etc.) event.target – объект, на котором случилось
- 77. Объект события Как получить доступ к событию, если обработчик навешивается через атрибут?
- 78. Объект события Как получить доступ к событию, если обработчик навешивается через атрибут? ...
- 79. Объект события Как получить доступ к событию, если обработчик навешивается через атрибут? ... Это эквивалентно ...
- 80. Всплытие события
- 81. Всплытие Первый параграф
- 82. Всплытие Первый параграф
- 83. Всплытие Первый параграф
- 84. Всплытие Первый параграф
- 85. Всплытие event.target – элемент, на котором изначально случилось событие event.currentTarget – элемент, на котором событие было
- 86. Всплытие Всплытие можно заблокировать ....
- 87. Всплытие Всплытие можно заблокировать .... В этом примере мы не увидим alert();
- 88. Всплытие Что если обработчиков несколько? .... var p = document.getElementsByTagName(‘p’)[0]; p.addEventListener(‘click’, stopsPropagation); p.addEventListener(‘click’, showsAlert);
- 89. Всплытие function stopsPropagation(event) { event.stopPropagation(); } function showAlert(event) { alert(event.target.tagName); // SPAN }
- 90. Всплытие ....
- 91. Всплытие ....
- 92. Всплытие ....
- 93. Всплытие function stopsPropagation(event) { event.stopImmediatePropagation(); } function showAlert(event) { alert(event.target.tagName); // SPAN }
- 94. Всплытие ....
- 95. Всплытие ....
- 96. Всплытие Не все события всплывают! Пример такого события – focus.
- 97. Всплытие На самом деле есть не только всплытие, но и погружение событий!
- 98. Всплытие Фазой, на которой будет обрабатываться событие, управляет третий, необязательный аргумент addEventListener elt.addEventListener(‘click’, handler, true); Для
- 99. Всплытие Кстати, событие focus... Оно не всплывает, но погружается.
- 100. Всплытие Кстати, событие focus... Оно не всплывает, но погружается.
- 101. Делегирование
- 102. Делегирование Задача: хотим при нажатии на каждый абзац в документе считать сколько в нем слов.
- 103. Делегирование Решение 1 (плохое) var pCol = document.getElementsByTagName(‘p’); for(var i = 0, l = pCol.length; i
- 104. Делегирование Чем плохо это решение?
- 105. Делегирование Чем плохо это решение? Если элементов будет много их перебор может занять время Навешивается обработчиков
- 106. Делегирование Решение 2 (почти правильное). Делегирование! document.body.addEventListener(‘click’, function(event) { if (event.target.nodeName == ‘P’) { countWords(event.target); }
- 107. Делегирование Решение 2 (почти правильное). Делегирование! Если элементов будет много их перебор может занять время Навешивается
- 108. Делегирование Решение 2 (почти правильное). Делегирование! Если элементов будет много их перебор может занять время Навешивается
- 109. Делегирование Решение 2 (почти правильное). Делегирование! Если элементов будет много их перебор может занять время Навешивается
- 110. Делегирование Решение 2 (почти правильное). Делегирование!
- 111. Делегирование Решение 2 (почти правильное). Делегирование! Текст, часть которого выделена жирным
- 112. Делегирование Решение 3 (правильное) function (event) { var target = event.target; while (target) { if (target.nodeName
- 113. Действие по умолчанию
- 114. Действие по умолчанию У многих событий есть действия по умолчанию: Click по ссылке – переход Mousedown
- 115. Действие по умолчанию Действие по умолчанию можно отменить elt.addEventListener(‘click’, function(event) { event.preventDefault(); });
- 116. Действие по умолчанию Действие по умолчанию можно отменить Если событие навешено через атрибут, можно короче elt.onclick
- 117. Действие по умолчанию Для чего это может применяться? Для отмены перехода по ссылке и выполнения вместо
- 118. Полезные ссылки
- 119. Учебник http://javascript.ru/ http://learn.javascript.ru/ http://learn.javascript.ru/document http://learn.javascript.ru/events-and-interfaces
- 120. Вопросы есть?
- 122. Скачать презентацию