我想检查href属性,如果它不包含完整路径,我想用完整的URL替换它?我应该使用那样做但不能在IE 8上运行的JavaScript吗?
我的JS:
fullUrl = $(this).filter('[href^='+document.location.protocol+']').attr('href')
? true : false;
url = fullUrl ?
$(this).filter('[href^='+document.location.protocol+']').attr('href')
: document.location.protocol + '//' + document.domain + $(this).attr('href');
我需要检查href是否包含完整的URL:
href:“/ path / other.html”(部分)
href:“http://domain.com/path/other.html”(完整网址)
然后如果我有部分url href,我必须添加域并重新创建href到完整的URL!
答案 0 :(得分:3)
完整网址可通过.href
媒体资源获取。
通常不需要将其设置为属性,但如果您愿意,可以这样做:
$('a[href]').attr('href', function() { return this.href; });
这将查找具有<a>
属性的所有href
元素,并使用attr()
[docs]方法更新其href
,方法是将函数作为第二个参数传递,该参数返回.href
属性的值。
如果您只想要一个列表,可以使用map()
[docs]方法。
var hrefs = $('a[href]').map(function() { return this.href; }).get();
示例: http://jsfiddle.net/EDhhD/
编辑:
如果您想明确检查路径是否已经是完整路径,只需在我的第一个示例中添加if
语句。
$('a[href]').attr('href', function(i,hrf) {
if( hrf.indexOf( 'http' ) !== 0 ) return this.href;
});
答案 1 :(得分:0)
我想你想要这个:
$(this).attr('href', function(i, v) {
if ( v.indexOf('http:') === -1 ) {
v = document.location.protocol + '//' + document.domain + '/' + v;
}
return v;
});
答案 2 :(得分:0)
我认为您无法在多个项目上调用attr
获得有意义的结果。你应该循环检查/更换,一次一项:
$(this).filter('[href^='+document.location.protocol+']').each(function(){
var fullUrl = $(this).attr('href') ? true : false;
var url = fullUrl ? $(this).attr('href') : document.location.protocol + '//' + document.domain + $(this).attr('href');
alert(url);
});
答案 3 :(得分:0)
此解决方案将确保页面上的所有锚点都具有href中的协议:
$(document).ready(function()
{
var str_len = document.location.protocol.length;
$('a').each(function()
{
if($(this).attr('href').substring(0,str_len) != document.location.protocol)
{
$(this).attr('href',document.location.protocol + '//' + $(this).attr('href'));
}
});
});