Как мне передать document.querySelector как переменную?

Чтобы применить принцип DRY, в моем коде много document.querySelector, и я создал функцию как таковую.

const documentQuerySelector = (tag, method, message) => {
  document.querySelector(`.${tag}`)`.${method}`= message;
};

Теперь, когда я вызываю функцию как таковую:

documentQuerySelector('message', '.textContent', '⛔️ No Number!');

текстовое содержимое HTML-текста с классом «сообщение» не изменяется на «⛔️ No Number!»

проблема в методе. Когда я передаю «.textContent» в функцию и использую его в селекторе запроса документа как таковом, сообщение document.querySelector(.${tag}).${method}= не распознает .${method}. Причина, по которой я знаю, что это проблема, заключается в том, что когда я использую ту же функцию и вместо этого вставляю «.textContent», она работает нормально. Как передать это свойство как переменную и как использовать его в document.querySelector?

Спасибо

Я попытался передать его как литерал шаблона, и это не сработало.

Я думаю, что у этого есть несколько проблем, первая из которых заключается в том, что неясно, чего вы пытаетесь достичь. Вы хотите, чтобы тег <message> с классом «.textContent» содержал «⛔️ No Number!»?

rx2347 11.05.2023 21:28

@ rx2347 похоже, что функция ищет элемент с классом .message, поскольку они добавляют селектор класса . к tag, затем пытаются передать метод textContent, а затем, наконец, устанавливают textContent класса .message в значение переданного аргумента message — одна из причин, по которой он определенно терпит неудачу, заключается в том, что .${method} будет строковым литералом (в приведенном примере) ..textConent.

disinfor 11.05.2023 21:32

не знаю как сушит....

epascarello 11.05.2023 21:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы хотите слишком много DRY здесь за счет гибкости и понятности. Кроме того, имя функции не предполагает каких-либо действий с найденным элементом. Само действие является установщиком свойств. А метод? Если вы посмотрите поближе, вы заметите, что здесь тоже не так много печатаете. Также другие программисты должны научиться обращаться с вашей функцией. Так что мой вердикт - используйте document.querySelector() как есть, это намного чище и императивнее.

  document.querySelector('.message').textContent = '⛔️ No Number!';

Если вы хотите сохранить свой набор текста — используйте jQuery, я думаю, что он все еще актуален в 2023 году, и почти все легко поймут ваш код:

  $('.message').text('⛔️ No Number!');

Если вы вызываете querySelector для одного и того же элемента несколько раз, вы можете сделать здесь DRY и сохранить элемент в переменной:

  const elMessage = document.querySelector('.message');

  elMessage.textContent = '⛔️ No Number!';
  // some other code
  elMessage.classList.toggle('visible', isMessageVisible);

Не уверен, как это сушит, поскольку вы в основном повторяете одно и то же, просто в другом формате, но вам нужно использовать нотацию скобок, чтобы использовать динамическое свойство. Таким образом, ваш код будет выглядеть примерно так:

const documentQuerySelector = (selector, property, value) => {
  document.querySelector(selector)[property] = value;
};


documentQuerySelector('.message', 'textContent', '⛔️ No Number!');
<div class = "message"></div>

Другие вопросы по теме

Похожие вопросы

Требуется ли изменение конфигурации приложения vue 3 с проверкой подлинности Azure AD при развертывании в качестве статического веб-приложения в службе хранилища Azure?
React.js: слишком много повторных рендеров. React ограничивает количество рендеров, чтобы предотвратить бесконечный цикл. - НЕ МОГУ НАЙТИ ПРОБЛЕМУ
Как вы получаете поведение «onchange» на страницах Blazor без JavaScript?
NavLink Active не работает для вложенных маршрутов
Меню гамбургера не отображается при открытии
Не удается запустить безголовый хром с помощью кукловода в контейнере докеров
Как оставить кнопку отключенной даже после перезагрузки страницы?
В моем тесте есть ошибка, из-за которой, если правильный ответ нажимается несколько раз, счет увеличивается бесконечное количество раз?
Модульный тест для приложения React: проблема с useNavigate
Как добавить значок для Content-Type: application/json