Вопрос по DOM в JS

105
06 апреля 2021, 16:00

У меня есть одна проблема с которой я очень часто сталкиваюсь при написании js кода. Объясню на пример. У меня сейчас есть несколько блоков разных цветов и для каждого нужно сделать полу-прозрачную маску при наведении.

<div class="test" >
  <div class="test-content" id="test-content-1"></div>
   <div class="mask" id="mask-1"></div>
</div>
<div class="test">
   <div class="test-content" id="test-content-2"></div>
   <div class="mask"  id="mask-2"></div>
</div>
<div class="test" id="test-3">
    <div class="test-content" id="test-content-3"></div>
    <div class="mask"  id="mask-3"></div>
</div>
 .test{
 background-color: red;
 position: relative;
}
.mask{
 position: absolute;
width: 100%;
left: 0;
top: 0;
background-color: rgba(0, 0, 0, 0.6);
display: none;
}

Обычно я решаю это, присваивая id Для каждого div-a с классом mask и test и просто дублирую код.

    $(document).ready(function () {
    $('#test-1').mouseover(function () { 
        $('#mask-1').css('display','block')
     });
 });
 $(document).ready(function () {
    $('#test-1').mouseout(function () { 
        $('#mask-1').css('display','none')
     });
 });
     $(document).ready(function () {
    $('#test-2').mouseover(function () { 
        $('#mask-2').css('display','block')
     });
 });
 $(document).ready(function () {
    $('#test-2').mouseout(function () { 
        $('#mask-2').css('display','none')
     });
 });
     $(document).ready(function () {
    $('#test-3').mouseover(function () { 
        $('#mask-3').css('display','block')
     });
 });
 $(document).ready(function () {
    $('#test-3').mouseout(function () { 
        $('#mask-3').css('display','none')
     });
 });

И такие задачи, где нужно реализовать одинаковый функционал с элементами с одинаковым классом встречаются постоянно и использую я вот такой костыльный метод. Это не очень удобно и один и тот же код постоянно дублируется с разными id. Как написать скрипт, таким образом, чтобы js сам получал нужный id у элементов с одинаковыми классами?То есть, чтобы можно было обратиться к элементу с классом "test" и "mask", вытащить у них id и уже вешать действия к элементам по полученному id. Надеюсь вопрос понятен.

Answer 1

Конкретно в этом случае это можно реализовать вообще 2-мя строками в css без js

.test { 
  background-color: red; 
  position: relative; 
  height: 40px; 
  margin-bottom: 10px; 
} 
 
.mask { 
  position: absolute; 
  width: 100%; 
  height: 100%; 
  left: 0; 
  top: 0; 
  background-color: rgba(0, 0, 0, 0.6); 
  display: none; 
} 
 
.test:hover .mask{ 
  display: block; 
}
<div class="test"> 
  <div class="test-content"></div> 
  <div class="mask"></div> 
</div> 
<div class="test"> 
  <div class="test-content"></div> 
  <div class="mask"></div> 
</div> 
<div class="test"> 
  <div class="test-content"></div> 
  <div class="mask"></div> 
</div>

Если более общий случай, то события можно вешать на класс, а не id

$('.test').mouseover(function() { 
  $(this).children('.mask').css('display', 'block') 
}); 
 
$('.test').mouseout(function() { 
  $(this).children('.mask').css('display', 'none') 
});
.test { 
  background-color: red; 
  position: relative; 
  height: 40px; 
  margin-bottom: 10px; 
} 
 
.mask { 
  position: absolute; 
  width: 100%; 
  height: 100%; 
  left: 0; 
  top: 0; 
  background-color: rgba(0, 0, 0, 0.6); 
  display: none; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<div class="test"> 
  <div class="test-content"></div> 
  <div class="mask"></div> 
</div> 
<div class="test"> 
  <div class="test-content"></div> 
  <div class="mask"></div> 
</div> 
<div class="test"> 
  <div class="test-content"></div> 
  <div class="mask"></div> 
</div>

READ ALSO
На чистом js можно найти предка n-уровня?

На чистом js можно найти предка n-уровня?

Сейчас, чтобы найти нужного мне предка, я пишу elemparentElement

106
JQuery AJAX success не срабатывает

JQuery AJAX success не срабатывает

При клике отправляется объект на сервер, статус == 200, но success не срабатывает, вместо него работает error, что не так ?

96
Js RegExp Проверка на числа и некотрые символы

Js RegExp Проверка на числа и некотрые символы

Мне нужно вернуть true , если вводимое значение содержит любые цифры, а так же точку или запятую, или двоеточиеПробовал так, но работает некорректно:

117
Двойные круглые скобки - что означают?

Двойные круглые скобки - что означают?

Помогите пожалуйста понять синтаксис выражения на Javascript в React (Mobx) :

87