首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类而不是ID

使用类而不是ID
EN

Stack Overflow用户
提问于 2016-01-31 18:47:39
回答 2查看 62关注 0票数 2

我的父类中有两个$(this).parent('div').next('.client-rolldown').show();,其中一个是由$(this).parent('div').next('.deal-rolldown').show();找到的,另一个是div,它找不到语法上相等的div。

在WordPress中,我迭代了(未知)数量的帖子,每个帖子都有两个按钮来显示更多内容。到目前为止,我已经在每个迭代中运行了一个文档就绪函数,以解决每个按is显示的问题,但这效率很低。

因此,我正在尝试使用类来编写函数。这是JavaScript

代码语言:javascript
复制
$('.deal-link').click(function() {
    $('.deal-rolldown').hide(); // hide all 
    $('.client-rolldown').hide(); // hide all 
    if ($(this).hasClass('active')) {
        $(this).removeClass('active');
    } else {
        $(this).addClass('active');
        $(this).next('.deal-rolldown').show();
    }
});

$('.client-link').click(function() {
    $('.client-rolldown').hide(); // hide all 
    $('.deal-rolldown').hide(); // hide all 
    if ($(this).hasClass('active')) {
        $(this).removeClass('active');
    } else {
        $(this).addClass('active');
        $(this).next('.client-rolldown').show();
    }
});

它正在此HTML上运行

代码语言:javascript
复制
<div class="company">
    <div class="company-inner">
        <h2>Company 1 </h2> Company 1 Summary
    </div>
    <a href="javascript:void(0);" class="deal-link">Deal summary</a>
    <a href="javascript:void(0)" class="client-link">Client review</a>
</div>
<div style="display: none;" class="deal-rolldown">
    Company 1 reveal 1 content
</div>
<div style="display: none;" class="client-rolldown">
    Company 1 reveal 2 content
</div>

<div class="company">
    <div class="company-inner">
        <h2>Company 2 </h2> Company 2 Summary
    </div>
    <a href="javascript:void(0);" class="deal-link">Deal summary</a>
    <a href="javascript:void(0)" class="client-link">Client review</a>
</div>
<div style="display: none;" class="deal-rolldown">
    Company 2 reveal 1 content
</div>
<div style="display: none;" class="client-rolldown">
    Company 2 reveal 2 content
</div>

addClass('active')运行得很好,所以我知道我得到了正确的按钮,但是next()函数什么也不做。没有错误。如何从每个按钮中选择适当的显示?

编辑以下闭包:这是一个与标记为重复的问题不同的问题。

EN

回答 2

Stack Overflow用户

发布于 2016-01-31 18:54:40

第一件事,而不是做

代码语言:javascript
复制
if ($(this).hasClass('active')) {
    $(this).removeClass('active');
} else {
    $(this).addClass('active');
}

您可以使用$(this).toggleClass('active');

您的问题是,next()返回紧随其后的同级元素,而.deal-rolldown不是.deal-link元素的同级元素。

你想要做的是

代码语言:javascript
复制
$(this).parent('div').next('.deal-rolldown').show();
票数 2
EN

Stack Overflow用户

发布于 2016-01-31 18:54:01

next()函数获取与选择器匹配的紧随其后的同级。类为'.deal-rolldown'的div不是'.client-link''.deal-link'链接的同级。我建议使用.closest('.deal-rolldown')而不是.next(),后者将通过遍历当前项的祖先来找到最接近的匹配元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35112938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档