2009-08-18 171 views
2

有沒有一種方法可以輕鬆處理JavaScript中的操作URL?有沒有簡單的JavaScript方法來操縱任意的URL?

上下文的位:

我想使用的ThickBox,流行的jQuery模式彈出框,但不顯眼。根據該文件的ThickBox我得給,我要進行模態CSS類的「ThickBox的」,改變從URL中的所有鏈接...

http://www.mysite.com/mypopup

...到:

http://www.mysite.com/mypopup?height=200&width=300

我想只有在啓用JavaScript的情況下才會發生這種情況。

所以我得到所有的鏈接使用jQuery和「黑客」檢測'?'字符在URL中,相應地附加「&高度...」或「?高度...」。

在事物的宏偉計劃,這可能矇混過關的東西了,如果URL已經有一個「高度」的參數,在這種情況下,我可能只是想更新現有的一個,而不是給它兩項。

這一切都聞起來有點。

我覺得我正在破解可能/必須已經正確完成的代碼!

所以我的問題是:

有沒有在JavaScript世界的東西(插件或沒有),這將使我是這樣的:

var url = Url(elm.attr("href")); 
url.parameter("width", "300"); 
url.parameter("height", "200"); 
elm.attr("href", url.toString()) 

或者:

var height = Url(elm.attr("href")).parameter("height"); 

回答

1

這個函數這樣做,只是把它要解析URL的網頁上:

function gup(name) 
{ 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
    return ""; 
    else 
    return results[1]; 
} 

//for the URL http://www.mysite.com/mypopup?height=200&width=300 

var height = gup('height'); 
var width = gup('width'); 
alert('Height: ' + height + ' Width: ' + width); 

編輯:我不知道這將是多麼有用使用(因爲它使用的Prototype.js),但是這是讀取和修改查詢字符串:

http://code.nontalk.com/2006/10/readmodify-querystring-variables-with.html

+0

不錯..但是,這並不讓我設置的URL查詢字符串參數。關鍵在於操縱URL(或者HREF可能是更好的方式)。我可以更新此方法,以非常容易地將URL作爲參數(而不是使用window.location.href),但它不會允許我更改或添加查詢字符串參數。 – joshcomley 2009-08-18 13:39:51

+0

我之前的評論是關於一個完全不同的答案! – joshcomley 2009-08-18 14:36:56

+0

@joshcomley - 我把這一切都回來了,所以你的評論意義再次。 – karim79 2009-08-18 14:53:57

0

是。在javascript中的location對象有quite a lot of properties

對於你的問題: 「WIDTH = 300」 location.search = "width=300";將適用於您的網址。

+0

這是更近一步,但如果有10個參數,我想只更新一個參數呢?我可以對它進行正則表達,但它又是一個「黑客」,就像之前必須做的事情,但比我好;) – joshcomley 2009-08-18 13:43:31

0

你或許可以做到這一點使用jQuery,即

$(".thickbox").each(function() { 
    this.href += "?height=200&width=300"; 
}); 

我沒有測試這一點,它可能是錯的,我不是在一個位置的時刻進行測試,但希望它會如果沒有其他的話,請指出你的方向是正確的如果你的jQuery的ThickBox的,那麼你不妨利用它的操縱;)

相關問題