如何检查href属性,如果需要,添加完整的URL地址?

时间:2011-07-03 18:50:02

标签: javascript jquery regex

我想检查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!

4 个答案:

答案 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;
});

现场演示: http://jsfiddle.net/simevidas/bwmQ5/

答案 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'));
        }
    });
});

http://jsfiddle.net/3XQXL/