#javascript #html #css
#javascript #HTML #css
Вопрос:
У меня есть HTML-код, внутри которого есть два родительских элемента div с классами «main» и «chat». В первом родительском элементе есть другой div с class=»menu»
Когда пользователь нажимает на меню, он добавит класс «open» в div. Теперь я хочу скрыть «чат», когда открыто меню.
И я знаю это, если я хочу выбрать класс, он должен быть внутри этого div. Есть ли какое-либо решение (с помощью css или js) для выбора другого div, который находится за пределами этого класса?
И у меня нет доступа к html-коду раздела «чат», потому что он загружается со стороннего веб-сайта.
Вот мой HTML-код:
<body>
<div class="main">
<div class="menu">
by click it will add "open" to the "menu" class
</div>
</div>
<div class="chat">
</div>
</body>
и это то, что я хочу сделать (но я знаю, что это не работает таким образом):
.menu.open .chat {display:none;}
Спасибо.
Комментарии:
1.
.chat
не находится внутри.menu
. Или вы пропускаете начало<div>
после<div class="menu">
2. да,
chat
его нет вmenu
, и это моя проблема. Я хочу выбрать класс, которого нет внутри div
Ответ №1:
$(".menu").on("click", function() {
$(".menu").addClass("open");
$(".chat").hide();
});
.open {
background: pink
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<div class="main">
<div class="menu">
by click it will add "open" to the "menu" class
</div>
</div>
<div class="chat">
Chat Div
</div>
</body>
Ответ №2:
Попробуйте этот пример кода:
JS:
function Open(){
document.getElementsByClassName("menu")[0].classList.add("open");
document.getElementsByClassName("chat")[0].style.display = "none";
}
HTML:
<body>
<div class="main">
<div class="menu" onclick="Open()">
by click it will add "open" to the "menu" class
</div>
</div>
<div class="chat"></div>
</body>
Ответ №3:
Вы можете использовать toggle()
и toggleClass()
в событии щелчка
$(".menu").on("click", function() {
$(".menu").toggleClass("open");
$(".chat").toggle()
});
.open{
color:blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<div class="main">
<div class="menu">
by click it will add "open" to the "menu" class
</div>
</div>
<div class="chat">
Chat Div
</div>
</body>
Ответ №4:
Вы можете достичь этого, если также добавите класс в main
(или только main
, а не menu
нет). Предположим, вы решили добавить класс menu-opened
в main
. Теперь вы должны быть в состоянии достичь желаемых результатов, используя код css:
.main.menu-opened~.chat {display:none;}
~
Используется для выбора каждого .chat
элемента, выполняемого по .main.menu-opened
элементу.
Ответ №5:
Вот решение:
Ванильный JS: (https://codepen.io/cssjs/pen/EMMPjV )
var btnMenu = document.querySelector('.menu')
var boxChat = document.querySelector('.chat')
btnMenu.onclick = handleMenu
function handleMenu(e) {
e.preventDefault()
e.stopPropagation()
if (!btnMenu.classList.contains('open')) {
btnMenu.classList.add('open')
boxChat.classList.add('open')
} else {
btnMenu.classList.remove('open')
boxChat.classList.remove('open')
}
}
jQuery: (https://codepen.io/cssjs/pen/eXXZEG )
var btnMenu = $('.menu')
var boxChat = $('.chat')
$(btnMenu).on('click', function() {
$(btnMenu).toggleClass('open')
$(boxChat).toggleClass('open')
})
HTML:
<body>
<div class='main'>
<a href="#menu" title="Menu" class='menu'>Menu</a>
</div>
<div class='chat'>
<div>Some chat content.</div>
</div>
</body>
CSS:
.chat {
display: none
}
.menu.open {
color: red;
font-weight: bold;
}
.chat.open {
display: block
}
Надеюсь, это поможет. 🙂
Ответ №6:
Вот рабочий код, какой вы хотите .. Но я добавил класс «открыть» в main, несмотря на меню.
jQuery(document).ready(function($) {
$('.menu').on('click', function(){
$('.main').toggleClass('open');
})
});
.main.open .chat{
display: none;
}
<div class="main">
<div class="menu">
by click it will add "open" to the "menu" class
</div>
</div>
<div class="chat">
chat data
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>