【发布时间】:2013-11-21 09:54:22
【问题描述】:
我有一个菜单栏,其中包含反映操作类别的顶部菜单项,这些操作是对可见数据的排序或过滤操作:
<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>
当用户选择排序或过滤操作时,我的脚本当前会将相应范围中的文本替换为操作的名称,并将适当的类添加到范围以指定选择,以便如果您选择 @987654322 @ 在Category1 菜单中,跨度如下所示:
<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 链接,该链接应将所有具有 set-filter 类的 spans 替换为原始类别名称或现有排序操作。
我遇到的麻烦是能够一次选择带有sort-filter 的所有跨度,然后循环以相应地更改文本和类。我目前有执行此操作的咖啡脚本代码:
$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")
但后来我无法访问跨度的关键属性,例如文本。
这种循环操作的正确方法是什么?
【问题讨论】:
标签: javascript jquery html coffeescript