[英]On clicking a link use link's ID to find div with specific class that is the same as ID from that link that Is kept in an array
I have an array that is storing ID's taken from Anchor links and applying them to specific divs.我有一个数组,用于存储从锚链接中获取的 ID 并将它们应用于特定的 div。 I need the link whose ID has been applied to the div through the array to when clicked open that specific div which is working as an overlay/modal.
我需要其 ID 已通过数组应用于 div 的链接,以便在单击时打开该特定 div,该 div 用作叠加层/模态。 I am stuck as I am trying to use:
我在尝试使用时被卡住了:
$('[id^="overlay-box-"]').click(function(){
if ($('.overlay-box').hasClass($this)) {
$('.overlay-box').fadeIn('slow');
}
})
Which does not work.这不起作用。
The Html is: Html 是:
<a class="overlay-open" href="#" id="overlay-box-one"></a>
<a class="overlay-open" href="#" id="overlay-box-two"></a>
<a class="overlay-open" href="#" id="overlay-box-three"></a>
<a class="overlay-open" href="#" id="overlay-box-four"></a>
<a class="overlay-open" href="#" id="overlay-box-five"></a>
These ID's are stored in an array.这些 ID 存储在一个数组中。 and applied to div's with this class:
并通过此类应用于 div:
<div class="overlay-box"></div>
<div class="overlay-box"></div>
<div class="overlay-box"></div>
<div class="overlay-box"></div>
<div class="overlay-box"></div>
So they output on page load as:所以他们在页面加载时输出为:
<div class="overlay-box overlay-box-one"></div>
<div class="overlay-box overlay-box-two"></div>
<div class="overlay-box overlay-box-three"></div>
<div class="overlay-box overlay-box-four"></div>
<div class="overlay-box overlay-box-five"></div>
the css is css是
// Overlay Box
.overlay-box {
display: none;
position: fixed;
}
.overlay-box {
width: 100vw;
height:100vh;
//position:absolute;
//top: 0%;
//left: 0%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 10000;
overflow:visible;
backdrop-filter: blur(4px);
-o-backdrop-filter: blur(4px);
-ms-backdrop-filter: blur(4px);
-moz-backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
As previously stated the issue I am having is writing the Jquery/JS to once one of the anchor links above are clicked to fade in the specific div the anchor link relates to.如前所述,我遇到的问题是,一旦单击上面的锚链接之一以淡入与锚链接相关的特定 div,我就会将 Jquery/JS 写入。
My JS at the moment is:我目前的 JS 是:
var overlayarray = $('.overlay-open').map(function(i) {
return this.id;
});
$( ".overlay-box" ).each(function( index ) {
$(this).addClass(overlayarray[index]);
});
$('[id^="overlay-box-"]').click(function(){
if ($('.overlay-box').hasClass($this)) {
$('.overlay-box').fadeIn('slow');
}
})
Last part does not work I know.我知道最后一部分不起作用。
I have also tried this我也试过这个
$('.overlay-open').click(function(){
$(this).each(function (i) {
var currentId = $(this).attr('id');
if ($('.overlay-box').hasClass(currentId)) {
$('.overlay-box').fadeIn('slow');
}
});
});
Does not work also and when I use the below, it opens all divs也不起作用,当我使用以下内容时,它会打开所有 div
$('[id^="overlay-box-"]').click(function(){
$('.overlay-box').fadeIn('slow');
});
You can do it like this:你可以这样做:
You do your selection with CSS directly inside document.querySelector(".overlay-box." + a.id)
, where you extract id of clicked link, and use it in selector:您可以直接在
document.querySelector(".overlay-box." + a.id)
使用 CSS 进行选择,您可以在其中提取点击链接的 id,并在选择器中使用它:
when you click link with id:当您单击带有 id 的链接时:
overlay-box-three
use that, then search for element with classes: .overlay-box.overlay-box-three
使用它,然后搜索带有类的元素:
.overlay-box.overlay-box-three
EXAMPLE using document.querySelector
:示例使用
document.querySelector
:
[...document.querySelectorAll("a.overlay-open")].forEach(a => { a.addEventListener('click', event => { event.preventDefault(); document.querySelector(".overlay-box." + a.id).style.display = "block"; console.clear(); console.log(a.id) }) });
.overlay-box { display: none; }
<div class="overlay-box overlay-box-one">overlay-box overlay-box-one</div> <div class="overlay-box overlay-box-two">overlay-box overlay-box-two</div> <div class="overlay-box overlay-box-three">overlay-box overlay-box-three</div> <div class="overlay-box overlay-box-four">overlay-box overlay-box-four</div> <div class="overlay-box overlay-box-five">overlay-box overlay-box-five</div> <a class="overlay-open" href="#" id="overlay-box-one">overlay-box-one</a> <a class="overlay-open" href="#" id="overlay-box-two">overlay-box-two</a> <a class="overlay-open" href="#" id="overlay-box-three">overlay-box-three</a> <a class="overlay-open" href="#" id="overlay-box-four">overlay-box-four</a> <a class="overlay-open" href="#" id="overlay-box-five">overlay-box-five</a>
And to fix you last attempt using jquery:并使用 jquery 修复您的最后一次尝试:
$('[id^="overlay-box-"]').click(function(event){
$('.overlay-box.'+this.id).fadeIn()
});
Take note we passed event on click with .click(function(event)
so we can later use this.id
to get id of clicked element and use it selector.请注意,我们在单击时使用
this.id
.click(function(event)
传递了事件,因此我们稍后可以使用this.id
获取单击元素的 id 并使用它选择器。
$('[id^="overlay-box-"]').click(function(event) { $('.overlay-box.' + this.id).fadeIn() });
.overlay-box { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="overlay-box overlay-box-one">overlay-box overlay-box-one</div> <div class="overlay-box overlay-box-two">overlay-box overlay-box-two</div> <div class="overlay-box overlay-box-three">overlay-box overlay-box-three</div> <div class="overlay-box overlay-box-four">overlay-box overlay-box-four</div> <div class="overlay-box overlay-box-five">overlay-box overlay-box-five</div> <a class="overlay-open" href="#" id="overlay-box-one">overlay-box-one</a> <a class="overlay-open" href="#" id="overlay-box-two">overlay-box-two</a> <a class="overlay-open" href="#" id="overlay-box-three">overlay-box-three</a> <a class="overlay-open" href="#" id="overlay-box-four">overlay-box-four</a> <a class="overlay-open" href="#" id="overlay-box-five">overlay-box-five</a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.