# Введение в **DOM**. **DOM** (*Document Object Model*) - внутренние объекты и функции *браузерного* **JS**, которые позволяют работать с деревом тэгов текущей загруженной страницы. **JS** через это **API** имеет полный доступ ко всему тому, что есть в HTML и CSS. ## Корень Корнем дерева элементов **DOM** является объект `document` ## Поиск элементов Что бы найти элемент, нужно обратится к методу `document`, или любого другого элемента, в который нужно что-то найти: ```javascript var el = document.getElementById("someId"); //обратите внимания, без # var el2 = document.querySelector("#someId"); //поиск по любому селектору, аналог jQuery var el3 = document.querySelectorAll("a"); //поиск всех тэгов a ``` Так же, с некоторых пор, `id` тэга HTML является ключем в объекте `window` (т. е. в глобальной области видимости), что позволяет обращаться к элементам еще проще: ```javascript alert(someId.innerText) ``` ## Создание элементов **DOM** ```javascript document.createElement("a"); //обратите внимание, без <> ``` Добавление элементов: ```javascript var tr = document.createElement("tr"); var td = document.createElement("td"); var td2 = document.createElement("td"); tr.appendChild(td); //добавление ячейки в конец строки таблицы. tr.insertBefore(td2, tr.childNodes[0]); //добавление ячейки перед первой ячейкой (в самое начало строки таблицы) ``` Ссылка на родительский элемент находится в свойстве `parentElement`: ```javascript tr.childNodes[0].parentElement == tr ``` ## Свойства объектов или наборов объектов элементов в **DOM** - `value` - **свойство** а не функция для значения поля ввода. - `attributes` - объект `attributes` с атрибутами html-тэга. Также есть 4 функции для работы с атрибутами: - `hasAttribute` - проверка на наличие атрибута - `getAttribute` - чтение - `setAttribute` - запись - `removeAttribute` - удаление - `style` - объект стиля элемента - `innerHTML` - строка вложенного HTML в элементе. - `innerText` - строка вложенного текста в элементе. ## События Каждый элемент **DOM** содержит множество свойств `on...`, в которые вы можете занести тот или иной обработчик события: ```javascript document.onmousemove = function(){ document.write("mouse move
"); } ``` Так же можно добавлять обработчики используя метод элемента `addEventListener`: ```javascript document.addEventListener("mousemove",function(){ document.write("mouse move
"); }); ```