Как мне изменить свойство CSS с помощью . в его имени?

#javascript #css

#javascript #css — код

Вопрос:

На веб-сайте, для которого я пытаюсь создать тему, у них есть CSS-имя ul.menu li ul, и я хочу изменить его свойство border-top. Я знаю, как это сделать с помощью простых имен CSS, таких как mycssname, но как мне сделать это с точкой в JavaScript?

Я уже пробовал эти:

 document.getElementsByClassName("ul.menu li ul")[0].style.borderTop = "5px solid #fff"
 
 document.getElementsByClassName("ul.menu li ul")[0].style.borderTop = "5px solid #fff"
 
 document.getElementsByClassName("ul")["menu li ul"].style.borderTop = "5px solid #fff"
 

Вот HTML-код:

 <ul class="ddm" style="display: block;">
 

Когда я проверяю его, он показывает изменяемое значение ul.menu li u в инспекторе CSS.

Но все они выдают ошибку неопределенного значения.

Комментарии:

1. Можете ли вы добавить фрагмент HTML-кода, чтобы мы лучше понимали, к чему вы хотите добавить стиль?

2. @FoundingBox готово. Я добавил HTML-код.

3. Очевидно, что в данном HTML не будет элемента DOM, который соответствовал бы вашим селекторам CSS "ul.menu li ul" и "ul.menu li ul" . И что вы ожидаете document.getElementsByClassName("ul")["menu li ul"] получить взамен?.

4. ul.menu ищет элемент <ul class="menu"> , подобный приведенному вами примеру <ul class="ddm"> .

Ответ №1:

Вы не можете использовать селектор CSS с getElementsByClassName() , вы должны определить для него имя класса. итак, вы можете сделать:

document.querySelector("ul.menu li ul").style.borderTop = "5px solid #fff"

Или,

document.querySelectorAll("ul.menu li ul")[0].style.borderTop = "5px solid #fff"

Комментарии:

1. Это не работает. Я не уверен, что думаю, что это может быть потому, что это не ul.menu li ul , но я действительно думаю, что это так.

2. OP обновил вопрос, элемент неупорядоченного списка (ul) имеет другое имя класса, ul.ddm li ul может работать с вашим ответом.

Ответ №2:

Как упоминалось другими, на самом деле работает следующее.

 document.querySelector('ul.menu li ul').style.borderTop = "5px solid #fff";
 

Тем не менее, сайт в ссылке (https://v3rmillion.net ) имеет два элемента, соответствующие этому селектору. Они видны только при наведении курсора мыши. (Главная страница и разное)

Поэтому нам нужно изменить код, чтобы обновить все элементы, соответствующие селектору:

 let result = [...document.querySelectorAll('ul.menu li ul')].forEach(el => {
     el.style.borderTop = '5px solid #fff';
})
 

В качестве альтернативы, если вы просто хотите обновить второй элемент:

 document.querySelectorAll('ul.menu li ul')[1].style.borderTop = '5px solid #fff';
 

Ответ №3:

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

 <h1 class="app"> Hello world </h1>
document.getElementsByClassName("app").style.borderTop = "5px solid #fff"
 

Комментарии:

1. Как мне это сделать, если я не являюсь владельцем веб-сайта?

Ответ №4:

Вы можете сделать следующее

     const elements = document.getElementsByClassName("ddm");
    elements[0].style.borderTop = "5px solid #fff";

 

Ответ №5:

Прочитайте документы для document.getElementsByClassName() :

Метод getElementsByClassName интерфейса Document возвращает массивоподобный объект всех дочерних элементов, которые имеют все заданные имена классов.

Имейте в виду, что селекторы CSS читаются справа налево, ваш селектор ожидает что-то вроде этой структуры:

 <ul class="menu">
  <li>
    <ul></ul> <!-- style this element -->
  </li>
</ul
 

Там нет элемента с этими классами. Точнее li , и ul являются даже не классами, а именами тегов HTML.

Использование либо querySelector или querySelectorAll будет более подходящим в зависимости от того, нужен ли вам только первый соответствующий элемент или все соответствующие элементы. Оба этих метода принимают селектор css.

Ответ №6:

Вы можете поместить селектор в качестве параметра querySelector() метода:

 document.querySelector('ul.menu li ul').style.borderTop = "5px solid #fff";
 

Я вижу, что более одного элемента на вашем сайте соответствует этому селектору, поэтому вам нужно будет установить стили для всех таких элементов:

 document.querySelectorAll('ul.menu li ul').forEach(e=>e.style.borderTop = "5px solid #fff");
 

Комментарии:

1. Он вывел «5px solid #fff» , но он не работает. Пожалуйста, проверьте по адресу v3rmillion.net/index.php если это возможно. Когда вы наводите курсор на кнопку «разное» и видите маленькую красную полосу, я пытаюсь это изменить.

2. Просьба выполнить тест с обновленным фрагментом с querySelectorAll

3. У вас есть два элемента, которые соответствуют селектору, один из которых является выпадающим Home списком, а другой — для Misc . Используя первый фрагмент, вы применяете стили только к Home выпадающему списку.

4. Что я должен был бы использовать для Misc?

5. Второй фрагмент