2011-06-30 81 views
0

我正在构建一个网站页面,其中有16项服饰。如何使用jQuery切换元素?

我想要一个简单的文本导航,可以选择显示和隐藏男士,女士和全部产品。

导航

<ul class="sortNav"> 
<li class="first">View:</li> 
<li class="men button">Men</li> 
<li class="women button">Women</li> 
<li class="all button active">All</li> 
</ul> 

产品编号

<span class="prod men">Guys shirt</span> 
<span class="prod men">Guys Pant </span> 
<span class="prod women">Girls Pant</span> 
<span class="prod women">Girls Pant</span> 

棘手的部分
只有一个按钮,可以 “主动”。并且只有该类可见(一个或两个)才会被触发。

在此先感谢。

谢谢!有点结合了这两个回答。检查了这一点...

$('.products li.prod').toggle(true); 

$('.sortNav li.button').click(function() { 
    $('.sortNav li.button').removeClass('active'); 
    $(this).addClass('active'); }); 

$('.sortNav li.men').click(function() { 
    $('.products li.prod').toggle(false); 
    $('.products li.men').toggle(true); }); 

$('.sortNav li.women').click(function() { 
    $('.products li.prod').toggle(false); 
    $('.products li.women').toggle(true); }); 

$('.sortNav li.all').click(function() { 
    $('.products li.prod').toggle(true); 
+0

所以,你想从每个人收尸'active'类? – Korcholis

+0

我以为他只是想根据他们点击的ul切换他显示的产品 –

+0

那么,没有任何单一的答案接受?没有你的问题吗? – Korcholis

回答

2

我碾压一点点的代码,但你也应该改变李项

HTML:

<ul class="sortNav"> 
<li class="first">View:</li> 
<li section="mens" class="men button">Men</li> 
<li section="womens" class="women button">Women</li> 
<li section="all" class="all button active">All</li> 
</ul> 

<div id="all" class="section">All Clothing</div> 
<div id="mens" class="section">Mens Clothing</div> 
<div id="womens" class="section">Womens Clothing</div> 

JS:

$(document).ready(function(){ 
    $('li.button').click(function(){ //listens to each element li with class button 
     $('li.button').removeClass('active'); //removes 'active' class from all of them 
     $(this).addClass('active'); //adds the class to this one 

     $('.section').toggle(false); 
     $('#'+$(this).attr('section')).toggle(true); 
    }); 

    $(".section").toggle(false); 
}); 

如您所见,我添加了一个部分属性,您可以将其指定为切换(true)作为ID。这有点危险,但它有效。

+0

是的,这听起来是正确的......那么添加显示/隐藏产品呢? – Buildingbrick

+0

@Buildingbrick结帐我的例子详细说明如何显示和隐藏 –

+0

@Buildingbrick看我的Edit2。顺便说一句,http://jsfiddle.net/SLbpk/ – Korcholis

1

退房这个js小提琴:http://jsfiddle.net/9kL7q/3/*新小提琴

HTML:

<ul class="sortNav"> 
<li class="first">View:</li> 
<li id="men" class="men button">Men</li> 
<li id="women" class="women button">Women</li> 
<li id="all" class="all button active">All</li> 
</ul> 

<div id="all" class="section">All Clothing</div> 
<div id="men" class="section">Mens Clothing</div> 
<div id="women" class="section">Womens Clothing</div> 

的Javascript:

$(".section").not("#all").toggle(false); 

$(".section").click(function(){ 
    $(".section").toggle(false); 
    $("#" + $(this).attr("id")).toggle(true); 
}); 
+0

有没有一种方法来正常化呢?或者将代码放到一个可以用于所有三个按钮的单一功能上? – Buildingbrick

+0

@Buildingbrick我更新了小提琴,这段代码给它看看 –

+0

看起来不错!但是“全部”实际上只是“男人”和“女人”,所以拥有全部“部分”将是多余的......对吗? – Buildingbrick

0

@ kmb385:我固定的jQuery选择为您作出点击“男装”和“女装”工作http://jsfiddle.net/9kL7q/2/

+0

这也会起作用。以前从未使用“切换(false)”,通常使用“hide()”。由于我们使用切换作为事件,因此我认为切换效果更好。 – Buildingbrick

0
$(document).ready(function() { 
    $('.sortNav li.button').click(function() { 
     // Set this button as active 
     $('.sortNav li.button').removeClass('active'); 
     $(this).addClass('active'); 

     // Show and hide items that do or don't match this button's classes 
     // (.prod.all won't get messed with, but you could make the HTML say 
     // 'class="prod men women"' instead and it should work) 
     $('.prod.women').toggle($(this).hasClass('womens')); 
     $('.prod.men').toggle($(this).hasClass('mens')); 
    }); 
}); 

与HTML使用,看起来像这样:

<ul class="sortNav"> 
    <li class="first">View:</li> 
    <li class="mens button">Men</li> 
    <li class="womens button">Women</li> 
    <li class="mens womens button active">All</li> 
</ul> 

<div class="prod all">an item for everyone</div> 
<div class="prod women">Womens item</div> 
<div class="prod men">Mens item</div> 
<div class="prod men">More Mens stuff</div> 
<div class="prod women">More Womens stuff</div> 
+0

.hasClass()事件的用途是什么? – Buildingbrick

+0

它测试元素(本例中的按钮)在其CSS类中是否具有“男士”或“女士”。代码将采用任何具有“prod”和“men”类的元素,并且(因为“toggle”的工作方式)显示它,如果*按钮*具有“mens”类,则将其隐藏。与女性的东西类似的故事。做这项工作的关键是为“全部”按钮提供“男士”和“女士”类 - 这使得两个'hasClass'调用返回'true',从而使所有内容都显示出来。 – cHao

+0

顺便说一句,作为参考,'.hasClass'不是一个事件。这是一种方法(基本上,是一个对象上的函数)......在这种情况下,jQuery对象(从$('whatever')'得到的东西)继承的对象。像.click这样的东西也是方法。 jQuery恰好使用它们来连接事件处理程序并触发事件。 – cHao