简体   繁体   English

单击链接时,使用链接的 ID 查找具有特定类的 div,该类与该链接中保存在数组中的 ID 相同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM