2012-12-05 234 views
2

給定兩條絕對路徑,例如,從兩個絕對路徑構建JavaScript中的相對路徑

/var/data/stuff/xyz.html 
/var/data 

如何創建一個使用第二個路徑作爲其基礎的相對路徑?在上面的例子中,結果將是:東西/ xyz.html

又如:

/relative/sub/foo/sub/file 
/relative/path 
../../../path 

這類似於this question,但是我正在尋找最佳的JavaScript解決方案而不是Java。

+2

[使用URI.js](http://medialize.github.com/URI.js/)。 – zzzzBov

+0

「優化」是什麼意思?代碼大小,運行時間或內存使用情況最佳?代碼大小爲 – tjameson

+0

。無法想象內存使用率或運行時間對於如此微不足道的事情來說是一個相當大的因素。 –

回答

5

如果你使用的是Node.js服務器上運行此:

http://nodejs.org/api/path.html#path_path_relative_from_to

這是他們實現:

https://github.com/joyent/node/blob/master/lib/path.js#L233

這應該在瀏覽器中工作,而沒有任何更改。它已經過戰鬥測試,所以它已經處理邊緣情況。這不是一蹴而就的,但它完美無瑕,我認爲更重要。 POSIX版本並不差,如果這是你唯一需要支持的。

+0

我正在運行客戶端,但看起來可行。將看看我能否得到它的工作。 –

1

URL處理出錯很容易,所以我強烈建議使用庫來處理所有細節。

URI.js使這個簡單的:

URI('/var/data/stuff/xyz.html').relativeTo('/var/data'); 
+0

看起來它會起作用,但是有沒有比整個圖書館更簡潔的方式? –

+0

也許吧,但您有多關注監控您的表現? – zzzzBov

+0

足夠接近照顧。 –