if (!Element.prototype.closest) {
Element.prototype.closest = function() {
// Пишем реализацию полифила
};
}
Полифилы для DOM
window – глобальный объект
window.document === document; // true
<!DOCTYPE html>
<html>
<head>
<title>CERN</title>
</head>
<body>
CERN
is a European research organization
</body>
</html>
Hello everybody!
var elem = document.getElementById('hello');
Hello everybody!
Aloha
Привет
var elems = document.getElementsByClassName('greeting'); // 3 элемента
var parent = document.getElementsByClassName('hello')[0];
var elems = parent.getElementsByClassName('greeting'); // 2 элемента
// преобразование в массив
var elems = document.getElementsByClassName('hello');
var elemsArray = Array.prototype.slice.call(elems);
var elemsArrayES6 = Array.from(elems); // > ES6
Hello everybody!
Aloha
Good bye
var elems = document.getElementsByTagName('span'); // 3 элемента
var parent = document.getElementsByTagName('div')[0];
var elems = parent.getElementsByTagName('span'); // 2 элемента
Hello everybody!
Aloha
Goodbye
Aloha
document.querySelectorAll('.container div:first-child');
// NodeList [ Hello everybody!, Goodbye ]
Goodbye
Hello everybody!
Aloha
document.querySelector('.greeting');
// Goodbye
document.querySelector('.container .greeting');
// Hello everybody!
var div = document.querySelector("#too");
div.closest("#block"); //<div id="block" title="Я - блок">
div.closest("div"); //Сам <div id="too">
div.closest("a"); //null
Hello
Aloha
Привет
var container = document.getElementById('container');
console.log(container.childNodes); // Hello Aloha Привет
console.log(container.firstChild); // Hello
console.log(container.lastChild); // Привет
console.log(container.firstChild.parentNode); // ...
console.log(container.firstChild.nextSibling); // Aloha
console.log(container.lastChild.previousSibling); // Aloha
hi
Hello
Aloha
Привет
var container = document.getElementById('container');
console.log(container.children); // Hello Привет
console.log(container.firstElementChild); // Hello
console.log(container.lastElementChild); // Привет
console.log(container.firstElementChild.parenElement); // ...
console.log(container.firstElementChild.nextElementSibling); // Привет
console.log(container.lastElementChild.previousElementSibling); // Hello
Hello everybody!
Aloha!
var container = document.getElementById('container');
console.log(container.firstChild.nodeType); // 1
console.log(container.lastChild.nodeType); // 3
let div = document.querySelector('div');
console.log(div); // <div>Привет</div>
div.innerHTML = 'Hi!'
console.log(div); // <div>Hi!</div>
div.outerHTML = '<h1>Aloha</h1>'
console.log(div) // <div>Hi!</div>
<!DOCTYPE html>
console.log(document.firstChild.data); // Комментарий
console.log(document.firstChild.nodeValue); // Комментарий
console.log(document.lastChild.data); // undefined
console.log(document.lastChild.nodeValue); // null
//Создание элемента
var element = document.createElement(tagName);
//Создание текстового узла
var textNode = document.createTextNode(text);
- 0
- 1
- 2
- 0
- 1
- 2
- 0
- 1
- 2
- 3
var newLi = document.createElement('li');
newLi.innerHTML = '3';
// newLi.appendChild(document.createTextNode('3'))
list.appendChild(newLi);
- 0
- 1
- 2
- 0
- 1
- 2
- 0
- 3
- 1
- 2
var newLi = document.createElement('li');
newLi.innerHTML = '3';
// newLi.appendChild(document.createTextNode('3'))
list.insertBefore(newLi, list.children[1]);
- 0
- 1
- 2
- 0
- 1
- 2
- 1
- 2
var list = document.getElementById('list');
list.removeChild(list.firstChild);
- 0
- 1
- 2
- 0
- 1
- 2
- 3
- 1
- 2
var list = document.getElementById('list');
var newLi = document.createElement('li');
newLi.innerHTML = '3';
list.replaceChild(newLi, list.firstChild);
Щелкни меня
var li = document.getElementByTagName('li')[0];
li.onclick = function () { alert('hello'); }
li.addEventListener('click', function(event) {
alert('aloha');
});
var li = document.getElementByTagName('li')[0];
li.addEventListener('click', function(event){ alert('привет'); });
// не работает
li.removeEventListener('click', function() { alert('привет'); });
var li = document.getElementByTagName('li')[0];
var onClickHandler = function(event) {
alert('привет');
}
li.addEventListener('click', onClickHandler);
li.removeEventListener('click', onClickHandler);
Cначала cобытия срабатывают на самом вложенном элементе, затем на его родителе, и так далее, вверх до window
eventform.onclick = function(event) {
alert('target = ', event.target.tagName);
alert('this = ', this.tagName);
}
- 0
- 1
- 2
// без делегирования
var logger = function(event) {
console.log(event.target.innerHTML);
}
var liElements = document.getElementsByTagName('li');
for (var i = 0; i < liElements.length; i++) {
var li = liElements[i];
li.addEventListener('click', logger);
}
- 0
- 1
- 2
// с делегированием
var logger = function(event) {
if(event.target.tagName === 'LI') {
console.log(event.target.innerHTML);
}
}
var ul = document.getElementsByTagName('ul')[0];
ul.addEventListener('click', logger);