javascript - 如何正确编写可以单独工作的 jQuery 切换按钮?
问题描述
我正在尝试创建简单的脚本来切换按钮,这些按钮可以放置在页面上的任何位置并且无论结构如何都可以单独工作。
$(document).ready(function() {
$('.togBtn').each(function(i) {
$(this).click(function() {
$('.togItem').hide();
} else {
$('.togItem').show();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
<div class="togBtn" id="togBtn-1">
<button>But 1</button>
<div class="togItem" id="togItem-1">Item 1</div>
</div>
<button class="togBtn" id="togBtn-2">But 2</button>
<button class="togBtn" id="togBtn-3">But 3</button>
<div class="togItem" id="togBtn-2">Item 2</div>
<div class="togItem" id="togBtn-3">Item 3</div>
</section>
解决方案
您的代码中有几个问题。首先,click
处理函数不能有else
块。其次,您尝试隐藏/显示所有 .togItem
元素,而不是与单击的按钮相关的元素。
为了更合乎逻辑地处理这个问题,请将按钮和要显示的内容组合在一起。然后就可以在按钮被点击的时候使用DOM遍历来找到相关的item。在下面的示例中,我将它们都设为 a 的子级div
并用于next()
关联它们。试试这个:
jQuery(function($) {
$('.togBtn').click(function() {
$(this).next('.togItem').toggle();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
<div class="togBtnContainer">
<button class="togBtn">But 1</button>
<div class="togItem">Item 1</div>
</div>
<div class="togBtnContainer">
<button class="togBtn">But 2</button>
<div class="togItem">Item 2</div>
</div>
<div class="togBtnContainer">
<button class="togBtn">But 3</button>
<div class="togItem">Item 3</div>
</div>
</section>
如果 HTML 展开并且相关元素不是同级元素,那么您可以改为使用data
属性来关联它们,如下所示:
jQuery(function($) {
$('.togBtn').click(function() {
var targetSelector = $(this).data('target');
$(targetSelector).toggle();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
<div class="togBtn" id="togBtn-1" data-target="#togItem-1">
<button>But 1</button>
<div class="togItem" id="togItem-1">Item 1</div>
</div>
<button class="togBtn" id="togBtn-2" data-target="#togItem-2">But 2</button>
<button class="togBtn" id="togBtn-3" data-target="#togItem-3">But 3</button>
<div class="togItem" id="togItem-2">Item 2</div>
<div class="togItem" id="togItem-3">Item 3</div>
</section>
推荐阅读
- google-admin-sdk - 有没有办法使用脚本在 Google 管理控制台上启用单个标志?
- macos - 如何创建应在 macOS 上启动 shell 脚本的应用程序图标
- image - GIF 压缩 - Flutter
- grafana - 是否可以在 Expression Grafana Query 中获得一系列的总和?
- c# - C# 将带有 Case 语句的 SQL 查询转换为 LINQ
- javascript - 使用 nodemailer 向 gmail 发送邮件时出现问题
- mysql - 使用 CA 证书建立安全的 jdbc 连接
- java - Java String.format() 是否防止字符串注入?
- python - 从 Pyspark Column 获取值并将其与 Python 字典进行比较
- sql - SAS从一行计算多个新变量