2013-11-21 132 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

相關問題