我正在一个网站上与BE开发人员合作-他们已经在Umbraco中构建了它,每个内容部分都有动态块,可以添加到页面中。
我们的客户端试图在一个页面上添加相同的“选项卡式内容”块两次,但是第二个块不起作用,因为JS只是针对它在类中找到的第一个元素
有没有办法修改JS,让两个模块独立工作?下面是一个简化的演示:
$('section.tabs nav li').click(function(){
var tabIndex = $(this).index();
$(this).addClass('active').siblings().removeClass('active');
$('section.tabs ul.tabs li.tab').eq(tabIndex).addClass('active').siblings().removeClass('active');
});
section.tabs main.tabsContainer ul.tabs li.tab{
display:none;
}
section.tabs main.tabsContainer ul.tabs li.tab.active{
display:flex;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>
First Tabbed Section
</h1>
<section class="tabs">
<nav>
<ul>
<li class="active">
<button>
Click for Tab 1
</button>
</li>
<li>
<button>
Click for Tab 2
</button>
</li>
<li>
<button>
Click for Tab 3
</button>
</li>
</ul>
</nav>
<main class="tabsContainer">
<ul class="tabs">
<li class="tab active">
<h2>
Tab 1
</h2>
</li>
<li class="tab">
<h2>
Tab 2
</h2>
</li>
<li class="tab">
<h2>
Tab 3
</h2>
</li>
</ul>
</main>
</section>
<hr />
<h1>
Second Tabbed Section
</h1>
<section class="tabs">
<nav>
<ul>
<li class="active">
<button>
Click for Tab 1
</button>
</li>
<li>
<button>
Click for Tab 2
</button>
</li>
<li>
<button>
Click for Tab 3
</button>
</li>
</ul>
</nav>
<main class="tabsContainer">
<ul class="tabs">
<li class="tab active">
<h2>
Tab 1
</h2>
</li>
<li class="tab">
<h2>
Tab 2
</h2>
</li>
<li class="tab">
<h2>
Tab 3
</h2>
</li>
</ul>
</main>
</section>
3条答案
按热度按时间xzabzqsa1#
这看起来像是一个DOM遍历非常方便的例子,看看它选择了什么:
这来自整个DOM的上下文,因此将返回整个DOM中的任何匹配元素。或者,如果从
this
的上下文开始,则可以向上遍历到公共父代,然后仅在该父代的上下文中查找目标元素。例如:liwlm1x92#
选择器
$('section.tabs ul.tabs li.tab')
在两个选项卡之间工作 *-所以$('section.tabs ul.tabs li.tab').length
(在你的小提琴上)将是6
,而不是3
。单击第二部分tab 2时,其索引为1(从0开始)。
这对应于
$('section.tabs ul.tabs li.tab').eq(4)
要只应用于 current 部分,请使用相对DOM导航-即从当前元素向上导航,而不是从顶层文档向下导航:
更新简化示例片段:
x一个一个一个一个x一个一个二个一个x一个一个三个一个
umuewwlo3#
选择器
$("section.tabs nav li")
与它在页面中找到的每个对应元素一起工作,所以如果你有2个,它们都应该工作。如果没有,可能还有另一个问题。如果你在控制台上运行$('section.tabs nav li')
,你只看到一个还是两个都看到?另外,如何区分
$('section.tabs ul.tabs li.tab').eq(tabIndex)
中的clicked tab元素?