← Назад к вопросам

Как получить параметры адресной строки в Next?

1.8 Middle🔥 141 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как получить элемент страницы

В JavaScript существует несколько способов получить доступ к элементам DOM. Выбор метода зависит от того, как вы хотите искать элемент: по ID, классу, селектору или типу тега.

Основные методы поиска элементов

querySelector и querySelectorAll

Это современные и универсальные методы, поддерживающие любые CSS селекторы:

// Получить первый элемент, соответствующий селектору
const element = document.querySelector('.button');
const elementById = document.querySelector('#main-heading');
const complex = document.querySelector('div.container > p:first-child');

// Получить все элементы (возвращает NodeList)
const elements = document.querySelectorAll('.button');
elements.forEach(el => console.log(el));

// Поиск в пределах конкретного элемента
const container = document.querySelector('#app');
const children = container.querySelectorAll('p');

getElementById, getElementsByClassName, getElementsByTagName

Это старые методы, но они быстрее querySelectorAll для простых случаев:

// По ID
const header = document.getElementById('header');

// По классу (возвращает HTMLCollection)
const buttons = document.getElementsByClassName('btn');

// По названию тега (возвращает HTMLCollection)
const paragraphs = document.getElementsByTagName('p');

Различия между результатами

NodeList vs HTMLCollection:

// querySelectorAll возвращает NodeList (статический)
const nodeList = document.querySelectorAll('div');
console.log(nodeList instanceof NodeList); // true

// getElementsByClassName возвращает HTMLCollection (живую)
const htmlCollection = document.getElementsByClassName('active');
console.log(htmlCollection instanceof HTMLCollection); // true

// Живая коллекция обновляется автоматически
const liveList = document.getElementsByClassName('item');
console.log(liveList.length); // 3
document.body.innerHTML += '<div class="item"></div>';
console.log(liveList.length); // 4 - обновилась!

// NodeList не обновляется автоматически
const staticList = document.querySelectorAll('.item');
console.log(staticList.length); // 4
document.body.innerHTML += '<div class="item"></div>';
console.log(staticList.length); // 4 - не изменилась

Практические примеры

Получение элемента и работа с его свойствами:

const button = document.querySelector('button.primary');
if (button) {
  console.log(button.textContent); // текст внутри
  console.log(button.className);   // классы элемента
  console.log(button.id);          // ID элемента
  button.addEventListener('click', () => {
    console.log('Кнопка нажата!');
  });
}

Поиск с проверкой наличия:

// Безопасный поиск
const form = document.querySelector('form#contact');
if (!form) {
  console.error('Форма не найдена!');
  return;
}

const inputs = form.querySelectorAll('input[type="text"]');
console.log(`Найдено ${inputs.length} текстовых полей`);

Поиск в React и современном коде:

// В React обычно используют refs вместо querySelector
import { useRef, useEffect } from 'react';

function MyComponent() {
  const inputRef = useRef(null);
  
  useEffect(() => {
    inputRef.current?.focus();
  }, []);
  
  return <input ref={inputRef} type="text" />;
}

// Но querySelector всё ещё полезен для точечного доступа
const modal = document.querySelector('[data-test="modal"]');

Рекомендации

Используйте querySelector/querySelectorAll — они универсальны, читаемы и подходят для большинства случаев. Старые методы полезны только если вам нужна максимальная производительность при работе с большим количеством элементов.

Всегда проверяйте существование элемента перед работой с ним, чтобы избежать ошибок в runtime. Используйте опциональную цепочку (?.) для безопасности.

Как получить параметры адресной строки в Next? | PrepBro