2013-11-21 76 views
0

我有反映的动作类别顶部的菜单项,这是可见的数据要么排序或过滤动作的菜单栏:jquery的:如何循环通过多个项目中选择

<ul class="menu-bar"> 
     <li class="top-menu-item"><a class="clear-filter">Clear</a></li> 
     <li class="top-menu-item"><a><span class="category Category1">Category1</span></a> 
      <ul> 
      <li><a>FilterAction</a></li>   
      <li><a>SortAction</a></li>   
      </ul> 
     <li class="top-menu-item"><a><span class="category Category2">Category2</span></a> 
     ... 
</ul> 

当用户选择一个排序或筛选操作,我有脚本编制,目前用相应范围内的文本替换动作名称,并在范围中添加适当的类以指定选择,以便如果在Category1菜单中选择FilterAction,跨度将显示像这样:

<span class="category Category1 set-filter">FilterAction</span> 

,如果你选择了SortAction相反,你将设置跨度

<span class="category Category1 set-sort">SortAction</span> 

,如果你选择了两个:一个分拣动作

<span class="category Category1 set-filter set-sort">SortAction, FilterAction</span> 

总是被列在最前面。

在任何时候只能有一个排序动作,但一次没有限制过滤器的数量。

要改变排序方式,因为一次只能有一个,这很容易 - 当我设置一个新的排序时,我检查看看现有的set-sort类,删除set-sort类,然后替换文本与保留为span(上面的Category1)的类的原始类别相符,或删除逗号(包含)之前的所有文本,以便只保留过滤器文本。这没有问题。

眼下去除过滤器的唯一方法是点击链接Clear,应全部更换span S作​​类或者与原来的类别名称或与现有的那种行动。

我一直有的麻烦是能够一次选择所有跨度为sort-filter的跨度,然后循环以相应地更改文本和课程。我现在有CoffeeScript的代码,这是否:

$target = $(event.target) # this will be the clear button 
$categorySpan = $target.parents(".menu-bar").eq(0).find(".set-filter") 
<< code to perform actions on $categorySpan >> 

现在这显然是行不通的,它只会通过每个跨度上执行所有选择的跨度毯子行动,而不是单独循环。我原本试图这样做:

for $categorySpan in $target.parents(".menu-bar").eq(0).find(".set-filter") 

但后来我无法获得跨度的关键属性,如文本。

做这种循环操作的正确方法是什么?

回答

1

我不确定你想做的所有事情......但是这个循环可以让你循环遍历每个集合的分类范围,并将文本应用到范围,或者做任何你想要的。

$('span.set-sort').each(function() { 
    var $this = $(this); 
    $this.text('Whatever you want').addClass('hello').removeClass('world'); 
}); 
+0

这完全做到了。 – fox

相关问题