Памятка по манипуляциям с DOM

Работа с селекторами:

//get all elements by tagName
document.getElementsByTagName("div");
//get all elements by className
document.getElementsByClassName("my-class"); //more fast


//querySelectorAll accepts full CSS selector groups, which lets you specify more than one unrelated selector. For instance
document.querySelectorAll("#myElement .my-class li:first-child");
document.querySelectorAll('textarea, input[type=text]');

Метод querySelectorAll будет возвращать статический NodeList, тогда как getElementsByTagName и getElementsByClassName будут возвращать живой NodeList.

 

Создание новых элементов

let frag = document.createDocumentFragment();
let myDiv = document.createElement("div");
let a = document.createElement("a");
a.setAttribute('href','https://google.com');
a.textContent = 'Click Me!';
myDiv.appendChild(a);
frag.appendChild(myDiv);
document.body.appendChild(frag);

Позиционирование элементов:

//By default new Element will be insert at the end of nodeList
parentNode.appendChild(newNode);


//or
referenceNode.insertAdjacentElement(position, node);


//delete
referenceNode.parentNode.removeChild(referenceNode);
// or
referenceNode.remove(); //No IE support


//delete all
while (parentNode.firstChild) {
parentNode.removeChild(parentNode.firstChild);
}

Примечание: ‘beforebegin’ и ‘afterend’ будут работать только тогда, когда referenceNode находиться в DOM дереве и имеет родительский элемент.
Возможны варианты:
        'beforebegin': Before the element itself.
        'afterbegin': Just inside the element, before its first child.
        'beforeend': Just inside the element, after its last child.
        'afterend': After the element itself.

 

Работа с атрибутами:

let valueOfAttribute = elem.attributeName;// get
elem.attributeName = 'newValue';// set


//or
let valueOfAttribute = elem[attributeName];
elem[attributeName] = 'newValue';


//WebAPI style
elem.getAttribute(attributeName);
elem.setAttribute(attributeName, value);
elem.removeAttribute(attributeName);
elem.hasAttribute(attributeName); // returns a boolean


//add CSS style
elem.style.backgroundImage = 'url(/image.jpg)';

 

Работа с именами классов:

// add a specified class
elem.classList.add('my-class')
// remove a specified class
elem.classList.remove('my-class')
// toggle a specified class
elem.classList.toggle('my-class')
// check the element has the specified class
elem.classList.contains('my-class') // returns a boolean

 

События:

//add
target.addEventListener(type, handler);
//remove
target.removeEventListener(type, handler); //handler must be a named function

 

Перемещение по элементам

//get parent element
myElement.parentElement;
//get next
myElement.nextElementSibling;
//get previous
myElement.previousElementSibling;


//children elements/ Read-only
myElement.children;


//first and last children element
myElement.firstElementChild;
myElement.lastElementChild;

Нативные методы будут возвращать null, если myElement является последним (первым) потомком его родителя.