非pushState浏览器中的JQuery Mobile Query String问题

时间:2011-09-20 17:45:36

标签: javascript jquery regex url-rewriting jquery-mobile

我试图将变量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团队考虑和解决,我可能只是遗漏了一些非常明显的东西。提前感谢您的帮助。

2 个答案:

答案 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, ' '));
}