仅显示来自点击 link 的内容并隐藏所有兄弟姐妹
Show content only from the clicked link and hide all siblings
如名称中所述,我有一个带链接的菜单,并且我有一个部分列表,我想在单击菜单时 show/hide。
我在这里想要的是在某种意义上是动态的,如果我添加更多的菜单和部分,我不必更改执行它的代码,或添加新的标签或名称。
我尝试自己做一些事情,但我可能遗漏了一些东西..
如有任何帮助,我们将不胜感激
我有一个关于这个 jfiddle 的简单例子:https://jsfiddle.net/s07ysx6w/6/
HTML:
<div id="header">
<div id="menuBlock">
<ul id="menu">
<li><a href="#novosti" name="sekcija1">Novosti</a></li>
<li><a href="#programMladi" name="sekcija2">Program Mladi</a></li>
<li><a href="#programOdrasli" name="sekcija3">Program Odrasli</a></li>
<li><a href="#programUpisi" name="sekcija4">Program Upisi</a></li>
<li><a href="#galerija" name="sekcija5">Galerija</a></li>
<li><a href="#kontakt" name="sekcija6">Kontakt</a></li>
</ul>
</div>
</div>
<body>
<div id="main">
<div id="novosti" name="sekcija1" class="sekcija">
aaaa
</div>
<div id="programMladi" name="sekcija2" class="sekcija">
aaaa
</div>
<div id="programOdrasli" name="sekcija3" class="sekcija">
aaaa
</div>
<div id="programUpisi" name="sekcija4" class="sekcija">
aaa
</div>
<div id="galerija" name="sekcija5" class="sekcija">
aaaa
</div>
<div id="kontakt" name="sekcija6" class="sekcija">
aaa
</div>
</div>
</body>
Javascript:
$(document).ready(function() {
$("#menu").click(function(e) {
var selected = this.attr('href');
$('#main' + selected).show('slow').siblings().hide('slow');
});
});
已编辑:
Copy/pasting 让我粗心了,所以现在只有唯一的 ID。还用一个有效的(解决方案)替换了 fiddle。
更新:
如果有人在 his/her 的页面上使用 slicknav 作为插件,要获取菜单中的元素,您需要了解 slicknav 是如何将其注入页面的.例如,在我的例子中,因为我将它添加到我的 #menuBlock
div 标签中。为了找到元素 #novosti
我必须深入挖掘,因为 slicknav 会自行创建标签以便按照它的方式工作。
在那种情况下,我的 javascript 看起来像这样。
$(document).ready(function(){
$("#menuBlock div ul li a").click(function (e){
e.preventDefault();
var selected = $(this).attr('href');
$( selected ).fadeIn('slow').siblings().hide();
});
});
如果 2 个选择器有父子关系,它们之间应该有一个 space,所以更改此行
$('#main' + selected).show('slow').siblings().hide('slow');
到
$('#main ' + selected).show('slow').siblings().hide('slow');
或简单地选择一个(因为它已经指向一个特定的元素)
$(selected).show('slow').siblings().hide('slow');
检查此更新 fiddle
$(document).ready(function(){
$("#menu li a").click(function (e){ //bind the event on `a` rather than ul
var selected = $(this).attr('href'); //use $(this) instead of this
$( selected ).show('slow').siblings().hide('slow'); //explained above
});
});
在您的代码中发现了不止一个错误,
- 设置一个Jquery库
Id
在整个 DOM 中应该是 unique
- 将
this.attr
替换为$(this).attr()
- 后代选择器是
#menu #something
而不是 #menu#something
- 应该
.stop()
在开始新动画之前播放动画。
试试,
$(document).ready(function() {
$("#menu li a").click(function(e) {
e.preventDefault()
var selected = $(this).attr('href');
$('#main ' + selected).stop().show('slow').siblings().hide('slow');
});
});
DEMO
试试这个方法
$(document).ready(function() {
$("#menu a").click(function(e) {
debugger;
var selected = $(this).attr('name');
$('#main div').hide();
$('#main div[name="'+selected+'"]').show('slow');
});
});
一个页面上不应有多个具有相同 ID 的元素,因此请将页面上的 ID 更改为更具体的内容。还是我记错了?从你的问题来看,你想要更可扩展的东西,这是一种方法
$(document).ready(function(){
$("#menu").click(function (e){
var element = $(e.target).attr('href');
$('#main-divs > ' + element).show('slow').siblings().hide('slow');
});
});
如名称中所述,我有一个带链接的菜单,并且我有一个部分列表,我想在单击菜单时 show/hide。 我在这里想要的是在某种意义上是动态的,如果我添加更多的菜单和部分,我不必更改执行它的代码,或添加新的标签或名称。 我尝试自己做一些事情,但我可能遗漏了一些东西.. 如有任何帮助,我们将不胜感激
我有一个关于这个 jfiddle 的简单例子:https://jsfiddle.net/s07ysx6w/6/
HTML:
<div id="header">
<div id="menuBlock">
<ul id="menu">
<li><a href="#novosti" name="sekcija1">Novosti</a></li>
<li><a href="#programMladi" name="sekcija2">Program Mladi</a></li>
<li><a href="#programOdrasli" name="sekcija3">Program Odrasli</a></li>
<li><a href="#programUpisi" name="sekcija4">Program Upisi</a></li>
<li><a href="#galerija" name="sekcija5">Galerija</a></li>
<li><a href="#kontakt" name="sekcija6">Kontakt</a></li>
</ul>
</div>
</div>
<body>
<div id="main">
<div id="novosti" name="sekcija1" class="sekcija">
aaaa
</div>
<div id="programMladi" name="sekcija2" class="sekcija">
aaaa
</div>
<div id="programOdrasli" name="sekcija3" class="sekcija">
aaaa
</div>
<div id="programUpisi" name="sekcija4" class="sekcija">
aaa
</div>
<div id="galerija" name="sekcija5" class="sekcija">
aaaa
</div>
<div id="kontakt" name="sekcija6" class="sekcija">
aaa
</div>
</div>
</body>
Javascript:
$(document).ready(function() {
$("#menu").click(function(e) {
var selected = this.attr('href');
$('#main' + selected).show('slow').siblings().hide('slow');
});
});
已编辑: Copy/pasting 让我粗心了,所以现在只有唯一的 ID。还用一个有效的(解决方案)替换了 fiddle。
更新:
如果有人在 his/her 的页面上使用 slicknav 作为插件,要获取菜单中的元素,您需要了解 slicknav 是如何将其注入页面的.例如,在我的例子中,因为我将它添加到我的 #menuBlock
div 标签中。为了找到元素 #novosti
我必须深入挖掘,因为 slicknav 会自行创建标签以便按照它的方式工作。
在那种情况下,我的 javascript 看起来像这样。
$(document).ready(function(){
$("#menuBlock div ul li a").click(function (e){
e.preventDefault();
var selected = $(this).attr('href');
$( selected ).fadeIn('slow').siblings().hide();
});
});
如果 2 个选择器有父子关系,它们之间应该有一个 space,所以更改此行
$('#main' + selected).show('slow').siblings().hide('slow');
到
$('#main ' + selected).show('slow').siblings().hide('slow');
或简单地选择一个(因为它已经指向一个特定的元素)
$(selected).show('slow').siblings().hide('slow');
检查此更新 fiddle
$(document).ready(function(){
$("#menu li a").click(function (e){ //bind the event on `a` rather than ul
var selected = $(this).attr('href'); //use $(this) instead of this
$( selected ).show('slow').siblings().hide('slow'); //explained above
});
});
在您的代码中发现了不止一个错误,
- 设置一个Jquery库
Id
在整个 DOM 中应该是 - 将
this.attr
替换为$(this).attr()
- 后代选择器是
#menu #something
而不是#menu#something
- 应该
.stop()
在开始新动画之前播放动画。
unique
试试,
$(document).ready(function() {
$("#menu li a").click(function(e) {
e.preventDefault()
var selected = $(this).attr('href');
$('#main ' + selected).stop().show('slow').siblings().hide('slow');
});
});
DEMO
试试这个方法
$(document).ready(function() {
$("#menu a").click(function(e) {
debugger;
var selected = $(this).attr('name');
$('#main div').hide();
$('#main div[name="'+selected+'"]').show('slow');
});
});
一个页面上不应有多个具有相同 ID 的元素,因此请将页面上的 ID 更改为更具体的内容。还是我记错了?从你的问题来看,你想要更可扩展的东西,这是一种方法
$(document).ready(function(){
$("#menu").click(function (e){
var element = $(e.target).attr('href');
$('#main-divs > ' + element).show('slow').siblings().hide('slow');
});
});