我正在抓一个新闻网站,他们也提供了整篇文章的链接,但是这些链接的href看起来像这样:
/news-features/8/news-headlines/103818/these-pupils-deserve-better
因此,我需要动态添加链接:
http://www.oldham-chronicle.co.uk
所以整个链接将是:
http://www.oldham-chronicle.co.uk/news-features/8/news-headlines/103818/these-pupils-deserve-better
正如您可以假设有超过1篇文章,但我需要添加的链接部分是相同的。因此,我需要添加它。
目前我有:
$("a").each(function(){
this.href=this.href.replace("http://www.oldham-chronicle.co.uk");
});
但是我的链接看起来像这样:
href="http://localhost/news-features/8/news-headlines/103818/these-pupils-deserve-better"
哪个错了,怎么解决?
答案 0 :(得分:2)
请改为尝试:
var base = "http://www.oldham-chronicle.co.uk/";
$('a').each(function(index, element) {
element.href = element.href.replace("http://localhost/", base);
})
基本上,这会循环遍历每个元素,并预先添加您想要的硬编码URL。 (如果需要,你也可以在没有jquery的情况下这样做)
编辑:误解了原始问题,从评论中更新以替换开头的网址(使用简单的匹配器)
答案 1 :(得分:0)
这对你有用
$("a").each(function(){
if ($(this).attr('href') != null) {
var newUrl = $(this).attr('href').replace("http://localhost","http://www.oldham-chronicle.co.uk");
if (newUrl.indexOf("http:")==-1) {newUrl = "http://www.oldham-chronicle.co.uk"+newUrl; }
$(this).attr('href',
);
}
});
答案 2 :(得分:0)
对于使用现代浏览器的读者,您只需使用the hostname
property:
$('a').each((i, e) => e.hostname = 'www.oldham-chronicle.co.uk');
请注意,这在Internet Explorer和其他一些浏览器中不起作用,如链接页面上所示。此示例还使用箭头函数,这些函数在某些旧版浏览器中不受支持。
答案 3 :(得分:0)
您可以通过执行以下操作来避免使用.each
:
$('a.link').attr('href', function(i, v){
console.log("replaced href:");
console.log(v);
return v.replace('http://localhost', function() {
return 'www.oldham-chronicle.co.uk';
})
});
// just to show new href
$('a.link').attr('href', function(i, v) {
console.log("new href:");
console.log(v);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="link" href="http://localhost/news-features/8/news-headlines/103818/these-pupils-deserve-better">Link1</a>
<a class="link" href="http://localhost/news-features/7/news-headlines/103818/these-pupils-deserve-better">Link2</a>
答案 4 :(得分:-4)
试试这个:
$("a").each(function(){
$(this).attr("href", "http://localhost/news-features/8/news-headlines/103818/these-pupils-deserve-better");
});