Выбор по атрибуту

Тренажер по работе с HTML DOM на JavaScript для пользователей с начальным и средним уровнем подготовки.

Тренажер JavaScript: Покоряем HTML DOM

В этом разделе вы научитесь выбирать элементы HTML по их атрибутам с помощью JavaScript. Атрибуты - это дополнительные свойства HTML-элементов, которые содержат метаданные и конфигурацию. JavaScript предоставляет множество методов для выбора элементов по их атрибутам, таких как querySelector, querySelectorAll и getAttribute. Вы научитесь выбирать элементы по конкретным атрибутам (class, id, data-*), по наличию атрибута и по значению атрибута. Эти навыки критически важны для динамического взаимодействия с веб-страницами и создания интерактивных пользовательских интерфейсов.

Список тем

Базовый выбор по атрибуту id

В этом задании вам нужно выбрать элемент с определенным id и изменить его текстовое содержимое. Используйте соответствующий метод для выбора элемента по его идентификатору.

HTML
Восстановить HTML
<div>
  <p id="tg">Этот текст нужно изменить</p>
  <p>Этот текст останется неизменным</p>
</div>
JavaScript
// Выберите элемент с id="tg" и измените его текст
const element = document.input__1("input__2");
element.input__3 = "Текст был успешно изменен!";
Для выбора элемента по id в JavaScript можно использовать метод document.getElementById(). Этот метод принимает строку с идентификатором элемента и возвращает сам элемент. После получения элемента вы можете изменить его textContent для установки нового текста.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Выбор элемента по атрибуту data-*

В этом задании вам нужно выбрать элемент с определенным data-атрибутом и изменить его стиль. Data-атрибуты начинаются с 'data-' и позволяют хранить дополнительную информацию в HTML-элементах.

HTML
Восстановить HTML
<div>
  <button>Обычная кнопка</button>
  <button data-role="primary">Главная кнопка</button>
  <button>Еще одна кнопка</button>
</div>
JavaScript
// Выберите элемент с data-role="primary" и сделайте его фон синим
const primaryButton = document.input__1('input__2');
primaryButton.input__3.input__4 = "blue";
primaryButton.style.color = "white";
Для выбора элемента по data-атрибуту можно использовать метод querySelector() с CSS-селектором атрибута в квадратных скобках. Например, document.querySelector('[data-role="button"]') выберет элемент с атрибутом data-role="button". После выбора элемента вы можете изменить его стиль через свойство style.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Выбор элементов по наличию атрибута

В этом задании вам нужно выбрать все элементы, которые имеют определенный атрибут, независимо от его значения, и изменить их стили.

HTML
Восстановить HTML
<form>
  <input type="text" placeholder="Имя">
  <input type="email" placeholder="Email" required>
  <input type="text" placeholder="Адрес" required>
  <input type="tel" placeholder="Телефон">
  <button>Отправить</button>
</form>
JavaScript
// Выберите все элементы с атрибутом required и добавьте им красную рамку
const requiredFields = document.input__1('input__2');

requiredFields.input__3((field) => {
  field.input__4.input__5 = '2px solid red';
});
Для выбора всех элементов с определенным атрибутом используйте метод querySelectorAll() с селектором атрибута в квадратных скобках, например document.querySelectorAll('[disabled]'). Этот селектор выберет все элементы с атрибутом disabled, независимо от его значения. После получения NodeList элементов, вы можете перебрать их с помощью forEach() и изменить стили.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Выбор по значению атрибута

В этом задании вам нужно выбрать элементы по конкретному значению атрибута и выполнить с ними определенные действия.

HTML
Восстановить HTML
<div>
  <a href="https://example.com" target="_blank">Ссылка 1</a>
  <a href="https://example.org">Ссылка 2</a>
  <a href="https://example.net" target="_blank">Ссылка 3</a>
  <a href="https://example.edu">Ссылка 4</a>
</div>
JavaScript
// Выберите все ссылки, которые открываются в новом окне (target="_blank"),
// и добавьте к их тексту индикатор (Внешняя ссылка)
const externalLinks = document.input__1('input__2');

externalLinks.forEach((link) => {
  link.input__3 += " (Внешняя ссылка)";
  link.style.input__4 = "blue";
});
Для выбора элементов по конкретному значению атрибута используйте querySelector или querySelectorAll с селектором атрибута в квадратных скобках, включая значение. Например, document.querySelectorAll('[type="email"]') выберет все элементы с атрибутом type, имеющим значение 'email'.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Проверка наличия атрибута

В этом задании вам нужно проверить наличие атрибута у элемента и, в зависимости от результата, выполнить определенные действия.

HTML
Восстановить HTML
<div>
  <button id="saveButton">Сохранить</button>
  <p id="message"></p>
</div>
JavaScript
// Проверьте, есть ли у кнопки атрибут disabled
// Если есть, выведите сообщение "Кнопка неактивна"
// Если нет, выведите сообщение "Кнопка активна"
const button = document.getElementById("saveButton");
const message = document.getElementById("message");

if (button.input__1("input__2")) {
  message.textContent = "Кнопка неактивна";
} else {
  message.textContent = "Кнопка активна";
  
  // Добавим обработчик события
  button.input__3("input__4", () => {
    message.textContent = "Данные сохранены!";
    button.input__5("input__6", "");
  });
}
Для проверки наличия атрибута у элемента можно использовать метод hasAttribute(), который возвращает true, если атрибут существует, и false в противном случае. Также можно использовать метод getAttribute(), который возвращает значение атрибута или null, если атрибут не существует.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Получение значения атрибута

В этом задании вам нужно получить значение определенного атрибута элемента и использовать его для дальнейших действий.

HTML
Восстановить HTML
<div>
  <img src="https://naytikurs.ru/assets/uploads/2025/01/java-1-700x525.png" alt="Java" data-category="programming" data-level="beginner">
  <div id="imageInfo"></div>
</div>
JavaScript
// Получите значения атрибутов изображения и отобразите информацию о нем
const img = document.querySelector("img");
const infoDiv = document.getElementById("imageInfo");

const altText = img.input__1("input__2");
const category = img.input__3("input__4");
const level = img.getAttribute("data-level");

infoDiv.innerHTML = `
  <p><strong>Описание:</strong> ${input__5}</p>
  <p><strong>Категория:</strong> ${input__6}</p>
  <p><strong>Уровень:</strong> ${level}</p>
`;
Для получения значения атрибута элемента используйте метод getAttribute(), который принимает имя атрибута и возвращает его значение. Если атрибут не существует, метод вернет null.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Фильтрация элементов по атрибутам

В этом задании вам нужно отфильтровать элементы по значению атрибута и показать только те, которые соответствуют определенному условию.

HTML
Восстановить HTML
<div>
  <div class="product" data-category="electronics" data-price="500">
    <h3>Смартфон</h3>
    <p>Современный смартфон с хорошей камерой</p>
  </div>
  <div class="product" data-category="books" data-price="20">
    <h3>Книга</h3>
    <p>Бестселлер этого года</p>
  </div>
  <div class="product" data-category="electronics" data-price="300">
    <h3>Наушники</h3>
    <p>Беспроводные наушники с шумоподавлением</p>
  </div>
  <div class="product" data-category="clothing" data-price="50">
    <h3>Футболка</h3>
    <p>Стильная футболка из хлопка</p>
  </div>
  <div id="filteredProducts"></div>
  <button id="filterButton">Показать электронику</button>
</div>
JavaScript
// Отфильтруйте продукты по категории "electronics" при нажатии на кнопку
const products = document.input__1(".product");
const filteredContainer = document.getElementById("filteredProducts");
const filterButton = document.getElementById("filterButton");

filterButton.addEventListener("click", () => {
  // Очистим контейнер перед добавлением отфильтрованных продуктов
  filteredContainer.innerHTML = "<h2>Электроника:</h2>";
  
  products.forEach(product => {
    const category = product.input__2("input__3");
    
    if (input__4 === "input__5") {
      // Клонируем продукт и добавляем в отфильтрованный список
      const productClone = product.input__6(true);
      filteredContainer.input__7(productClone);
    }
  });
});
Сначала выберите все нужные элементы с помощью querySelectorAll, затем используйте методы для работы с атрибутами (getAttribute, hasAttribute) в комбинации с методами массивов (forEach, filter) для фильтрации элементов по значению атрибута.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Изменение атрибутов элементов

В этом задании вам нужно изменить значения атрибутов нескольких элементов в зависимости от их текущих значений.

CSS
.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.enabled {
  background-color: #4CAF50;
  color: white;
  cursor: pointer;
}
HTML
Восстановить HTML
<div>
  <button class="toggle-button" data-state="disabled">Кнопка 1</button>
  <button class="toggle-button" data-state="enabled">Кнопка 2</button>
  <button class="toggle-button" data-state="disabled">Кнопка 3</button>
  <button id="toggleAll">Переключить все</button>
</div>
JavaScript
// Переключите состояние всех кнопок при нажатии на кнопку "Переключить все"
const toggleButtons = document.querySelectorAll(".toggle-button");
const toggleAllButton = document.getElementById("toggleAll");

// Инициализация состояний кнопок
toggleButtons.forEach(button => {
  const state = button.input__1("input__2");
  if (state === "disabled") {
    button.input__3("disabled", "");
    button.classList.add("disabled");
  } else {
    button.classList.add("enabled");
  }
});

toggleAllButton.addEventListener("click", () => {
  toggleButtons.forEach(button => {
    const currentState = button.getAttribute("data-state");
    
    if (currentState === "disabled") {
      button.input__4("input__5", "enabled");
      button.input__6("disabled");
      button.classList.remove("disabled");
      button.classList.add("enabled");
    } else {
      button.setAttribute("data-state", "disabled");
      button.setAttribute("disabled", "");
      button.classList.remove("enabled");
      button.classList.add("disabled");
    }
  });
});
Для изменения значения атрибута элемента используйте метод setAttribute(), который принимает два параметра: имя атрибута и новое значение. Для удаления атрибута используйте метод removeAttribute(), который принимает имя атрибута, который нужно удалить.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Выбор по нескольким атрибутам

В этом задании вам нужно выбрать элементы, соответствующие нескольким условиям по атрибутам одновременно.

HTML
Восстановить HTML
<div>
  <a href="https://example.com" class="link" target="_blank" rel="nofollow">Ссылка 1</a>
  <a href="https://example.org" class="link" target="_blank">Ссылка 2</a>
  <a href="https://example.net" class="link" rel="nofollow">Ссылка 3</a>
  <a href="https://example.edu" class="link">Ссылка 4</a>
  <button id="highlightLinks">Выделить внешние ссылки с nofollow</button>
  <div id="result"></div>
</div>
JavaScript
// Выберите все ссылки, которые открываются в новом окне И имеют атрибут rel="nofollow"
const highlightButton = document.getElementById("highlightLinks");
const resultDiv = document.getElementById("result");

highlightButton.addEventListener("click", () => {
  // Выберите ссылки с обоими атрибутами
  const specialLinks = document.input__1('input__2');
  
  resultDiv.textContent = `Найдено ссылок: ${input__3.input__4}`;
  
  specialLinks.forEach(link => {
    link.style.input__5 = "red";
    link.style.input__6 = "bold";
    
    // Добавим информацию о том, что ссылка особая
    const href = link.input__7("input__8");
    link.setAttribute("data-special", "true");
    link.textContent += " (особая ссылка)";
  });
});
Для выбора элементов по нескольким атрибутам одновременно используйте метод querySelectorAll() с составным CSS селектором. Например, document.querySelectorAll('input[type="text"][required]') выберет все текстовые поля ввода, которые также являются обязательными.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Создание элементов с атрибутами

В этом задании вам нужно создать новые элементы и установить им различные атрибуты перед добавлением на страницу.

HTML
Восстановить HTML
<div>
  <div id="gallery"></div>
  <button id="addImage">Добавить изображение</button>
</div>
JavaScript
// Создайте новый элемент img с атрибутами и добавьте его в галерею
const gallery = document.getElementById("gallery");
const addButton = document.getElementById("addImage");

const imageUrls = [
  "https://naytikurs.ru/assets/uploads/2025/02/mashinnoe-obuchenie-dlya-nachinayushhih-700x700.png",
  "https://naytikurs.ru/assets/uploads/2025/01/java-1-700x525.png",
  "https://naytikurs.ru/assets/uploads/2025/02/dengi-slava-i-kod-gid-po-samym-goryachim-it-professiyam-2025-dlya-teh-kto-hochet-byt-na-volne-700x525.png"
];

let imageIndex = 0;

addButton.addEventListener("click", () => {
  if (imageIndex >= imageUrls.length) {
    imageIndex = 0; // Начинаем сначала, если изображения закончились
  }
  
  // Создаем новый элемент img
  const newImage = document.input__1("input__2");
  
  // Устанавливаем атрибуты
  newImage.input__3("input__4", imageUrls[imageIndex]);
  newImage.input__5("alt", `Изображение ${imageIndex + 1}`);
  newImage.input__6("data-index", imageIndex);
  
  // Устанавливаем стили через объект style
  newImage.style.input__7 = "200px";
  newImage.style.margin = "10px";
  newImage.style.cursor = "pointer";
  
  // Добавляем обработчик события
  newImage.addEventListener("click", function() {
    const index = this.getAttribute("data-index");
    alert(`Вы кликнули по изображению #${parseInt(index) + 1}`);
  });
  
  // Добавляем изображение в галерею
  gallery.input__8(newImage);
  
  imageIndex++;
});
Для создания новых элементов используйте метод document.createElement(), затем установите нужные атрибуты с помощью setAttribute() или прямых свойств элемента. После этого добавьте созданный элемент на страницу с помощью appendChild() или других методов DOM.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку
НайтиКурс.Ру
Добавить комментарий