我有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?=”?
答案 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?='));
});
答案 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>
,速度提高了一个数量级,但不确定是否可以这样做)