#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. Второй фрагмент