如何替换链接

时间:2011-12-17 04:22:54

标签: jquery replace

我有4个链接

<a href="/search/Assassins%20Creed/" class="eTag">Assassins Creed</a> 
<a href="/search/Dead%20Rising%202/" class="eTag">Dead Rising 2</a> 
<a href="/search/Battlefield/" class="eTag">Battlefield</a> 
<a href="/search/Rising/" class="eTag">Rising</a> 

我需要将“/ search /”替换为“/ searchq?=”

如果我使用这个脚本:

$('.eTag').attr('href',$('.eTag').attr('href').replace('/search/','/searchq?=')); 

链接是:

<a href="/searchq?=Assassins%20Creed/" class="eTag">Assassins Creed</a> 
<a href="/searchq?=Assassins%20Creed/" class="eTag">Dead Rising 2</a> 
<a href="/searchq?=Assassins%20Creed/" class="eTag">Battlefield</a> 
<a href="/searchq?=Assassins%20Creed/" class="eTag">Rising</a> 

为什么以及如何将“/ search /”替换为“/ searchq?=”?

4 个答案:

答案 0 :(得分:5)

你需要遍历所有这些:

$('.eTag').each(function() {
  $(this).attr('href', $(this).attr('href').replace('/search/','/searchq?='));
});

我很惊讶您的代码甚至已经运行了。

答案 1 :(得分:3)

最好的方法是将函数传递给.attr()

$('.eTag').attr('href',function(i,href) {
    return href.replace('/search/','/searchq?='); 
});

原因是:

$('.eTag').attr('href')

...仅显示找到的第一个元素的结果。

答案 2 :(得分:0)

你所做的几乎是正确的,但它会指向相同的链接,因为attr值将始终从第一个元素返回。这样做

$('.eTag').each(function() {
  $(this).attr('href', $(this).attr('href').replace('/search/','/searchq?='));
});

小提琴:http://jsfiddle.net/USzfa/

答案 3 :(得分:0)

只是为了完成,你也可以在普通的javascript中完成它,而不用jQuery:

var tags = document.getElementsByClassName('eTag'),
    l = tags.length,
    i = 0;

for (i = 0; i < l; i++) {
  tags[i].innerText = tags[i].innerText.replace('/search/', '/searchq?=');
}

这可能有点吵闹,但是你可以在this jsperf test run中看到它快33%。 (注意还有第三种解决方案,使用包装器<div>,速度提高了一个数量级,但不确定是否可以这样做)