Я не знаю, почему этот класс не добавляется через javascript
Я пытаюсь добавить javascript класс show с выпадающим содержимым, но он не добавляется туда, более того, консольные журналы работают совершенно нормально вплоть до последней области видимости тега javascript script. Может ли кто-нибудь помочь мне в этом?
Текст с id в основном поступает из базы данных django, которая является уникальной.
<div class="eps_dots more_dropdown dropdown">
<a href="#" onclick="get()" id="{{course.course_id}}" class=""><i class="uil uil-ellipsis-v"></i></a>
<div class="dropdown-content ">
<span><i class="uil uil-heart"></i>Save</span>
<span><i class="uil uil-ban"></i>Not Interested</span>
<span><i class="uil uil-windsock"></i>Report</span>
</div>
</div>
<script>
function get() {
const focused = document.activeElement.getAttribute("id");
console.log(focused);
menu(focused);
}
function menu(focused) {
const path = '#' + focused + ' .dropdown-content';
console.log(path);
$(path).toggleClass("show");
}
</script>
.eps_dots .show{
display: block !important;
}
Учитывая, что вы используете jQuery, вам не следует получать атрибут id
щелкнутого элемента в виде строки, чтобы вручную скомпоновать селектор.
Кроме того, вы должны использовать ненавязчивые обработчики событий для привязки событий, а не встроенные onclick
атрибуты. Это позволит вам получить ссылку на щелкнутый элемент из события, которое передается обработчику в качестве аргумента. Отсюда вы можете перемещаться по DOM, чтобы найти .dropdown-content
для переключения соответствующего класса.
jQuery($ => {
$('.eps_dots > a').on('click', e => {
e.preventDefault();
$(e.currentTarget).closest('.eps_dots').find('.dropdown-content').toggleClass('show');
});
});
.dropdown-content {
display: none;
}
.eps_dots .show {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"></script>
<div class="eps_dots more_dropdown dropdown">
<a href="#" class="">
Click here...
<i class="uil uil-ellipsis-v"></i>
</a>
<div class="dropdown-content">
<span><i class="uil uil-heart"></i>Save</span>
<span><i class="uil uil-ban"></i>Not Interested</span>
<span><i class="uil uil-windsock"></i>Report</span>
</div>
</div>
В использованной вами функции "menu" заданный путь не существует, потому что id не будет родительским для выпадающего содержимого, а будет его сиблингом, поэтому он никогда не будет работать.
Чтобы ваш код работал, .dropdown-content должен быть обернут внутри тега anchor вот так
<a href="#" onclick="get()" id="{{course.course_id}}" class=""><i class="uil uil-ellipsis-v"></i>
<div class="dropdown-content ">
<span><i class="uil uil-heart"></i>Save</span>
<span><i class="uil uil-ban"></i>Not Interested</span>
<span><i class="uil uil-windsock"></i>Report</span>
</div>
</a>
Но поскольку это не тот случай, попробуйте использовать формат sibling
let current = document.querySelector('#' + focused);
let nextSibling = current.nextElementSibling;
Здесь nextSibling будет вашим элементом dropdown-content