Когда я начал изучать JavaScript, я ничего не мог понять. Каковы элементы? Зачем их выбирать? Как их выбрать? Что такое селекторы? и т. д. Здесь я постараюсь дать вам и себе лучшее понимание всех этих вопросов, упомянутых выше.

Начнем с основных идей. Как вы все, должно быть, уже знаете, JavaScript используется наряду с HTML и CSS для создания динамического и интерактивного веб-контента, такого как веб-сайты и приложения. JavaScript может обновлять и изменять как HTML, так и CSS. Для этого нам нужно select элементы, такие как имя тега, идентификатор, классы и т. д., из HTML, чтобы все заработало.

Селекторы используются для «поиска» (выбора) HTML-элементов на основе их имени тега, идентификатора, атрибутов, классов, типов, значений атрибутов и многого другого.

В заголовке мы упомянули элементы «DOM». DOM — это не что иное, как сокращенная форма объектной модели документа, и это программный интерфейс для документов HTML и XML. Он определяет логическую структуру документов и способ доступа к документу и управления им. В основном это выглядит как структура генеалогического древа.

Допустим, наши элементы (для ссылки на пример каждого метода) следующие:

<div id="tree-1" class="container">
  <span class="branch" name="fruit">APPLE</span>
  <span class="branch">APPLE</span>
  <span class="branch">APPLE</span>
  <pre> test </pre>
</div>
<div id="tree-2" class="container">
  <span class="new branch" name="new-fruit">BANANA</span>
  <span class="new branch">BANANA</span>
  <span class="new branch">BANANA</span>
</div>

Возвращаясь к нашему вопросу «как выбирать элементы в JavaScript?» JavaScript предоставляет шесть методов для выбора элемента из документа.

  1. получитьэлементбиид
  2. getElementsByTagName
  3. getElementsByClassName
  4. getElementsByName
  5. селектор запросов
  6. querySelectorAll

получитьэлементбиид

Метод getElementById возвращает элемент, идентификатор которого совпадает с заданной строкой.

document.getElementById("tree-1");

Поскольку идентификаторы элементов должны быть уникальными, это самый быстрый способ выбрать элемент. Метод getElementById доступен только в объекте document, поскольку, поскольку значения id должны быть уникальными, нет необходимости в отдельной функции. Если идентификатор не найден, то этот метод возвращает null.

Что происходит, когда идентификаторы двух элементов совпадают?

<div id="tree-2">foo</div>
<div id="tree-2">bar</div>

Здесь результат document.getElementById("tree-2") вернет элемент div, содержащий foo, а не bar. Потому что этот метод возвращает первый элемент, который он встречает в HTML, и не будет искать дальше.

getElementsByTagName

Метод getElementsByTagName интерфейса документа возвращает живую HTMLCollection найденных элементов в порядке их появления в дереве с заданным именем тега.

document.getElementsByTagName(span);

Как мы видели, getElementById можно вызывать только тогда, когда оно совпадает с именем, заданным в форме строки, но getElememtsByTagName можно вызывать для любого элемента. Если getElementsByTagName вызывается для элемента, то ищутся только дочерние элементы этого элемента.

let parent = document.getElementById("tree-1");
let spans = parent.getElementsByTagName(spans);
// the spans inside the parent element are returned.

Возвращаемая коллекция HTMLCollection — это живой список, который автоматически обновляет удаление или добавление узла. Если передать * (универсальный селектор), то будут выбраны все элементы. Переданное имя тега перед поиском элементов переводится в нижний регистр. Итак, для svg элементов используйте getElemetsByTagNameNS().

Метод getElementsByClassName

Метод getElementsByClassName возвращает HTMLCollection элементов, которые соответствуют заданному имени класса.

document.getElementsByClassName("branch");

Мы можем искать несколько имен классов, указав имена классов, разделенные пробелом.

let appleFruit = document.getElementsByClassName("branch");
let bananaFruit = document.getElementsByClassName("new branch");

getElementByClassName можно вызвать для любого элемента, и он вернет живую коллекцию HTMLCollection.

getElementsByName

Метод getElementsByName возвращает элементы, соответствующие значению name attribute с заданной строкой. Возвращаемое значение — это живая коллекция NodeList.

document.getElementsByName("fruit");

Не рекомендуется использовать getElementsByName, так как в Internet Explorer он работает иначе. И это создает некоторую двусмысленность, на мой взгляд.

селектор запросов

Метод querySelector возвращает первый элемент, соответствующий данному селектору.

//using id selector
document.querySelector("#tree-1");
//using class selector
document.querySelector(".branch");
//returns first element in the document with class name
//using tag name
document.querySelector("div");
//returns first div
//using tag name
document.querySelector("div span.branch");
//returns first span element with class name "branch", inside a div

querySelector можно вызывать в document и element. Если ни один элемент не соответствует селектору, возвращается null. syntaxError выдается, когда селектор css не совпадает.

querySelectorAll

Метод querySelectorAll является расширением метода querySelector. Этот метод возвращает все элементы, соответствующие заданному селектору.

document.querySelectorAll(".branch");
//returns all elements with branch class

querySelectorAll возвращает статическую (неактивную) коллекцию NodeList. Этот метод можно вызывать как для документа, так и для элементов. Мы можем отправить несколько селекторов, разделенных запятыми. Если совпадений не найдено, возвращается пустой NodeList.

Тише! Поначалу это может немного сбивать с толку. Меня это, конечно, смутило. Но, как мы знаем, программирование — это практика. Когда я понятия не имел об этих селекторах, я много искал в Интернете, и «educative.io» помог мне во всем в этой теме, и этот блог очень вдохновлен ими. Я надеюсь, что это было полезно для вас. Следите за мной на Medium, чтобы мотивировать меня писать хорошие и плохие статьи.