Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.07.2023, 14:17
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Как сократить объявление переменных и dom объектов
Здравствуйте. Подскажите как можно сократить код в которой идёт присваивание dom объектов к объявленным переменным?

код:
// Ссылки
let buttonA = document.querySelector('#buttonA'); // Категория 1
let buttonA1 = document.querySelector('#buttonA1'); // Категория 1 - Подкатегория 1
let buttonA2 = document.querySelector('#buttonA2'); // Категория 1 - Подкатегория 2
let buttonA3 = document.querySelector('#buttonA3'); // Категория 1 - Подкатегория 3
let buttonB = document.querySelector('#buttonB'); // Категория 2
let buttonC = document.querySelector('#buttonC'); // Категория 3

// Тела категории 1
let a1content1 = document.querySelector('#a1content1');
let a1content2 = document.querySelector('#a1content2');
let a1content3 = document.querySelector('#a1content3');
let a1content4 = document.querySelector('#a1content4');
let a1content5 = document.querySelector('#a1content5');

let a2content1 = document.querySelector('#a2content1');
let a2content2 = document.querySelector('#a2content2');
let a2content3 = document.querySelector('#a2content3');
let a2content4 = document.querySelector('#a2content4');
let a2content5 = document.querySelector('#a2content5');

let a3content1 = document.querySelector('#a3content1');
let a3content2 = document.querySelector('#a3content2');
let a3content3 = document.querySelector('#a3content3');
let a3content4 = document.querySelector('#a3content4');
let a3content5 = document.querySelector('#a3content5');

// Тела категории 2
let bcontent1 = document.querySelector('#bcontent1');
let bcontent2 = document.querySelector('#bcontent2');
let bcontent3 = document.querySelector('#bcontent3');
let bcontent4 = document.querySelector('#bcontent4');
let bcontent5 = document.querySelector('#bcontent5');

// Тела категории 3
let ccontent1 = document.querySelector('#ccontent1');
let ccontent2 = document.querySelector('#ccontent2');
let ccontent3 = document.querySelector('#ccontent3');
let ccontent4 = document.querySelector('#ccontent4');
let ccontent5 = document.querySelector('#ccontent5');


как можно сократить количество кода? Так чтобы кол-во символов и строк было гораздо меньше.
только без нано кода. only Vanilla js

Последний раз редактировалось WebMachine, 09.07.2023 в 14:20.
Ответить с цитированием
  #2 (permalink)  
Старый 09.07.2023, 15:55
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Как то так
const ids = ['buttonA', 'buttonA1',... 'ccontent5'];
let {buttonA, buttonA1, ... ccontent5} = ids.reduce ((obj, name) => (obj[name] = document.querySelector('#'+name), obj), {});
Ответить с цитированием
  #3 (permalink)  
Старый 09.07.2023, 16:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

WebMachine, ты можешь просто удалить весь этот код.)

Нет, серьёзно, для поддержки легаси все id автоматически мапятся в глобальные переменные и врядли когда-то поддержку этой фичи уберут.
<div id="textId">оппа</div>
<script>alert(textId.textContent)</script>


Конечно глобальные переменные могут быть переписаны каким-то другим скриптом, потому их использование не поощряется, однако судя по твоему вопросу и коду - в данном случае это не имеет значения.)
__________________
29375, 35

Последний раз редактировалось Aetae, 09.07.2023 в 16:05.
Ответить с цитированием
  #4 (permalink)  
Старый 09.07.2023, 16:05
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Можно и короче
const ids = ['buttonA', 'buttonA1',... 'ccontent5'];
ids.forEach(name => window[name] = document.querySelector('#'+name))

Но я не сторонник загаживания глобальных объектов
Ответить с цитированием
  #5 (permalink)  
Старый 09.07.2023, 16:22
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от Aetae
все id автоматически мапятся в глобальные переменные
Ну не все. Существующие свойства не перезаписываются.
<div id="alert">оппа</div>
<script>alert(alert.textContent)</script>
Ответить с цитированием
  #6 (permalink)  
Старый 09.07.2023, 16:23
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Сообщение от Aetae Посмотреть сообщение
WebMachine, ты можешь просто удалить весь этот код.)

Нет, серьёзно, для поддержки легаси все id автоматически мапятся в глобальные переменные и врядли когда-то поддержку этой фичи уберут.
<div id="textId">оппа</div>
<script>alert(textId.textContent)</script>


Конечно глобальные переменные могут быть переписаны каким-то другим скриптом, потому их использование не поощряется, однако судя по твоему вопросу и коду - в данном случае это не имеет значения.)
Оочень благодарен) довольно полезно. Спасибо
Ответить с цитированием
  #7 (permalink)  
Старый 09.07.2023, 16:28
Кандидат Javascript-наук
Отправить личное сообщение для WebMachine Посмотреть профиль Найти все сообщения от WebMachine
 
Регистрация: 11.10.2016
Сообщений: 141

Сообщение от voraa Посмотреть сообщение
Можно и короче
Очень благодарен. Спасибо.
Подскажите - это решение гадит?
const ids = ['buttonA', 'buttonA1',... 'ccontent5'];
ids.forEach(name => window[name] = document.querySelector('#'+name))

после этого переменные будут глобальными?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить найденный элемент в другой div, DOM titan1993 Элементы интерфейса 2 05.11.2013 16:52
Как удалить элемент из дерева DOM dummer jQuery 13 16.01.2011 16:19
DOM vs iframe. Как в ифрейме заменить выделенный текст (его innerHTML)? Бухалыч Events/DOM/Window 4 20.08.2009 14:30
ООП: как создавать наследника от встроенных объектов? Langalier Общие вопросы Javascript 17 02.02.2009 17:07
Как определить включен ли поддержака объектов ActoveX feodul Events/DOM/Window 5 02.06.2008 12:04