2012-11-15 96 views
0
<ul class="filter"> 
<li> 
<span class="filtertext"><span>Filter</span></span> 
<ul class="dropdown"> 
<li class="active"><a href="javascript:void(0)">All</a</li> 

<li><a href="#">Administrative Associates</a></li> 
<li><a href="#">Associate Principals</a></li> 
<li><a href="#">Associates</a></li> 
<li><a href="#">Chief Financial Officer</a></li> 
<li><a href="#">Directors</a></li> 
<li><a href="#">Principals</a></li> 
<li><a href="#">Senior Associates</a></li> 
<li><a href="#">Staff</a></li> 
</ul></li> 
</ul> 

我有一个设置了流沙的过滤器,上面的列表在我的网站上显示了一个下拉菜单。我想要做的是将标签中的文本“过滤器”替换为所选类别中的文本。将点击文本替换为点击链接的文本

我有这个工作,但是,它只是它第一次。我有一种感觉,我需要实现类似.each()的东西,但似乎无法弄清楚我应该把它放在哪里。以下是我的jQuery代码:

$('ul.dropdown li a').click(function(){ 
$('span.filtertext span').replaceWith($(this).html()); 
}); 

如果您需要更多信息,请让我知道。谢谢!

回答

2

它只在第一次工作的原因是因为您使用的是replaceWith,它实际上删除了元素;下次你的函数运行时,$('span.filtertext span')找不到任何东西。

用这个代替(增加缓存太):

var $filtertext = $('span.filtertext span'); 
$('ul.dropdown li a').click(function() { 
    $filtertext.text($(this).text()); 
}); 
0

当你要更改的文字,你应该这样做:

$('ul.dropdown li a').click(function(){ 
    $('span.filtertext span').html($(this).text()); 
}); 

因为如果你使用replaceWith更换span,替换后没有匹配'span.filtertext span'的对象...

0

我会使用jQuery的.text()来代替。

作品在http://jsfiddle.net/6kTQ5/

试试这个。

$('ul.dropdown li a').click(function(){ 
    $('span.filtertext span').text($(this).text()); 
});​ 
+0

只是好奇,因为我相当新的jQuery ...背后使用.text()而不是.html()背后的原因是什么?更高效? – kennycrippen

相关问题