我试图将变量cid从JQuery Mobile beta 3中的查询字符串中拉出来。
普通网址的示例如下 /category.php?cid=23
JQuery Mobile URL示例 /#/ category.php?CID = 23
由于JQuery Mobile Beta 3的url重写,我可以使用下面的函数在大多数浏览器中将变量拉出查询字符串。但IE不支持新的浏览器历史记录功能。 https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history
因此,我需要一种方法从上面看到的JQuery Mobile Url中提取查询字符串,以下我通常使用的以下函数无法正常工作。
function getQuerystring(key) {
var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
var r=[], m;
while ((m=re.exec(document.location.search)) != null) r.push(m[1]);
return r;
}
我要么寻找可以在不支持history.pushState的浏览器中找到散列变量的替代正则表达式,要么完全是其他解决方案。我在文档中搜索了这个问题的解决方案,但没有找到任何东西。我认为这将是一个问题,本来可以被JQuery Mobile团队考虑和解决,我可能只是遗漏了一些非常明显的东西。提前感谢您的帮助。
答案 0 :(得分:0)
工作演示(我认为)
相关链接:
JS
$('#page2').live('pageshow', function(event, ui) {
alert('Page 2 - CID: ' + getParameterByName('cid'));
});
function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
HTML(将rel =“external”添加到链接中)
<div data-role="page" id="home">
<div data-role="content">
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="f">
<li data-role="list-divider">
Home Page
</li>
<li>
<!--
Pass Parm Here before the hash page
and treating link as external
-->
<a href="?cid=1234#page2" rel="external">Page 2</a>
</li>
</ul>
</div>
</div>
<!-- page 2 -->
<div data-role="page" id="page2">
<div data-role="content">
<ul data-role="listview" data-inset="true" data-theme="c" data-dividertheme="f">
<li data-role="list-divider">
Page 2
</li>
<li>
<a href="?cid=4321#home">Home Page</a>
</li>
</ul>
</div>
</div>
答案 1 :(得分:0)
好的,这是一个能够处理这两种情况的函数,无论您使用的是什么浏览器,甚至是使用JQuery Mobile的方式。这段代码并不完美,我很高兴它现在有效。如果我更新功能,我会回来并在此处更新。
首先,代码会查看是否存在哈希值。如果它在其中查找查询字符串,就好像它是一个网址。如果不是,它只是检查变量的url。无论您在JQuery Mobile中检查它的状态如何,此代码都可以检查特定的querystring变量。天气它的页面创建页面显示或几乎任何其他事件,天气JQuery Mobile Beta 3已经通过pushstate重写了url。
function getQuerystring(name) {
var hash = document.location.hash;
var match = "";
if (hash != undefined && hash != null && hash != '') {
match = RegExp('[?&]' + name + '=([^&]*)').exec(hash);
}
else {
match = RegExp('[?&]' + name + '=([^&]*)').exec(document.location.search);
}
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}