javascript - 基于 URL 的 Jquery Tabs 添加/切换类
问题描述
我用 jQuery 设置了一些选项卡,但我想添加基于 URL 更改选项卡的功能。理想情况下,一旦 URL 后面跟着 id/data-attribute,浏览器就会滚动到相应的部分并且选项卡会打开。
$(document).ready(function(){
$('.gdlr-session-item-head-info').click(function(){
if( $(this).hasClass('gdlr-active') ) return;
$(".gdlr-session-item-head-info").removeClass('gdlr-active');
$('html, body').animate({
scrollTop: $(".gdlr-tab-session-item").offset().top-200
}, 1000);
var selected_tab = $(this).attr('data-tab');
var current_day = $(this).attr('current-day');
$(".currentDay-"+current_day).addClass('gdlr-active');
$('.gdlr-session-item-head').siblings('.gdlr-session-item-tab-content').hide();
$('.gdlr-session-item-head').siblings('.' + selected_tab).fadeIn();
});
}
HMTL
<div class="session-item-wrapper" id="agendaroduct" style="margin-bottom: 10px;">
<div class="gdlr-session-item gdlr-tab-session-item gdlr-item">
<div class="gdlr-session-item-head">
<a href="agenda/#currentDay-1">
<div id="currentDay-1" class="gdlr-session-item-head-info currentDay-0 gdlr-active" current-day="0" data-tab="gdlr-tab-1">
<div class="gdlr-session-head-day">Pre-Day</div>
<div class="gdlr-session-head-date">Tue, Nov 5</div>
</div>
</a>
<a href="agenda/#currentDay-2">
<div id="currentDay-2" class="gdlr-session-item-head-info currentDay-1" current-day="1" data-tab="gdlr-tab-2">
<div class="gdlr-session-head-day">Day 1</div>
<div class="gdlr-session-head-date">Wed, Nov 6</div>
</div>
</a>
<a href="agenda/#currentDay-3">
<div id="currentDay-3" class="gdlr-session-item-head-info currentDay-2" current-day="2" data-tab="gdlr-tab-3">
<div class="gdlr-session-head-day">Day 2</div>
<div class="gdlr-session-head-date">Thu, Nov 7</div>
</div>
</a>
<div class="clear"></div>
</div>
<div>
<div class="clear"></div>
</div>
<div class="gdlr-session-item-tab-content gdlr-tab-1 " style="display: block;"> content goes here
</div>
<div class="gdlr-session-item-tab-content gdlr-tab-2 gdlr-active" style="display: none;"> content goes here
</div>
<div class="gdlr-session-item-tab-content gdlr-tab-3 " style="display: none;"> conten goes here
</div>
<div class="gdlr-session-item-head end">
<div class="gdlr-session-item-head-info currentDay-0 gdlr-active" current-day="0" data-tab="gdlr-tab-1">
<div class="gdlr-session-head-day">Pre-Day</div>
<div class="gdlr-session-head-date">Tue, Nov 5</div>
</div>
<div class="gdlr-session-item-head-info currentDay-1" current-day="1" data-tab="gdlr-tab-2">
<div class="gdlr-session-head-day">Day 1</div>
<div class="gdlr-session-head-date">Wed, Nov 6</div>
</div>
<div class="gdlr-session-item-head-info currentDay-2" current-day="2" data-tab="gdlr-tab-3">
<div class="gdlr-session-head-day">Day 2</div>
<div class="gdlr-session-head-date">Thu, Nov 7</div>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
任何帮助将不胜感激。谢谢!
解决方案
您需要找到一种将散列值连接到 DOM 元素的方法。在您的情况下,您id
的选项卡触发器上的属性与此匹配,并且还包含相关信息以显示正确的选项卡以及其他功能(正如您在点击事件中所展示的那样)。
您可以将选项卡更改逻辑分离为一个函数,然后可以通过单击事件和页面加载调用该函数,方法是将预期的选项卡作为参数显示。
function showTab(element) {
if (element.hasClass("gdlr-active")) return;
$(".gdlr-session-item-head-info").removeClass("gdlr-active");
$("html, body").animate({
scrollTop: $(".gdlr-tab-session-item").offset().top - 200
}, 1000);
var selected_tab = element.attr("data-tab");
var current_day = element.attr("current-day");
$(".currentDay-" + current_day).addClass("gdlr-active");
$('.gdlr-session-item-head').siblings(".gdlr-session-item-tab-content").hide();
$('.gdlr-session-item-head').siblings("." + selected_tab).fadeIn();
}
然后,您的单击处理程序将被绑定调用该函数...
$('.gdlr-session-item-head-info').click(function(){
showTab($(this));
})
当页面加载时,您可以验证 URL 中的哈希是否是可用的 DOM 元素并将其也发送到您的函数。
$(document).ready(function () {
if (window.location.hash) {
var targetTab = $(window.location.hash)
if (targetTab.length) {
showTab(targetTab);
}
}
})
推荐阅读
- javascript - 如何在Javascript中组合具有相同值的数组
- sql - 在sql中将表从垂直转移到水平
- swift - 下采样图像
- javascript - 在 C/Rust 代码中为 Node-FFI 创建结构
- git - 如何在 git log 中以 %Y%m%d 格式打印提交日期?
- notifications - 如何使浏览器通知成为按钮中的可点击链接
- android - 如何在 Jetpack Compose 中更新画布上对象的位置变化?
- javascript - 打字稿:使用函数数组键入函数,该函数返回每个函数返回类型的数组
- css - 选择器右侧的 SASS (SCSS) 加号和 & 语法 ( + & ) 的含义?
- javascript - 光滑块中的未知背景颜色