2010-04-20 8 views
7

Also ich möchte Zeichenfolgen mit relativen URLs in Javascript verbinden.Beitritt relative URLs?

Basis url = "http://www.adress.com/more/evenmore"

mit

relativ url = "../../adress" => "http://www.adress.com/adress"
relativ url = "../adress" => " http://www.adress.com/more/adress "

Was wäre der beste Weg? Ich dachte daran, regexp zu verwenden und
zu überprüfen, wie viele "../" ich finde, dann subtrahiere diese Menge von der baseurl und addiere sie zu dem, was übrig ist.

Antwort

9

Die folgende Funktion zerlegt die URL und löst sie dann auf.

function concatAndResolveUrl(url, concat) { 
    var url1 = url.split('/'); 
    var url2 = concat.split('/'); 
    var url3 = [ ]; 
    for (var i = 0, l = url1.length; i < l; i ++) { 
    if (url1[i] == '..') { 
     url3.pop(); 
    } else if (url1[i] == '.') { 
     continue; 
    } else { 
     url3.push(url1[i]); 
    } 
    } 
    for (var i = 0, l = url2.length; i < l; i ++) { 
    if (url2[i] == '..') { 
     url3.pop(); 
    } else if (url2[i] == '.') { 
     continue; 
    } else { 
     url3.push(url2[i]); 
    } 
    } 
    return url3.join('/'); 
} 
+0

schön. Danke Kumpel! – heffaklump

+1

Ich habe das geändert, wo Ihr Test für '.' um auch die leere Zeichenfolge 'url1 [i] =='. ' || url1 [i] == '' 'Wenn die übergebenen URLs Schrägstriche enthalten, wird trotzdem eine gültige URL erstellt. +1 – Jay

6

Mit URI.js (http://medialize.github.com/URI.js/docs.html#absoluteto):

function joinUrl(baseUrl, url) { 
    var theUrl = new URI(url); 
    if (theUrl.is("relative")) { 
     theUrl = theUrl.absoluteTo(baseUrl); 
    } 
    return theUrl.toString(); 
}