2009-08-18 174 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的,那么你不妨利用它的操纵;)

相关问题