从url中检索特定哈希标记的值

时间:2010-09-16 17:30:00

标签: javascript hashtag

在原始Javascript中,如何检查网址中是否存在特定的哈希标记,然后获取值?

示例:http://www.example.com/index.html#hashtag1=value1&#hashtag2=value2

我希望能够获取 hashtag1 hashtag2 的值。

4 个答案:

答案 0 :(得分:26)

    var HashSearch = new function () {
       var params;

       this.set = function (key, value) {
          params[key] = value;
          this.push();
       };

       this.remove = function (key, value) {
          delete params[key];
          this.push();
       };


       this.get = function (key, value) {
           return params[key];
       };

       this.keyExists = function (key) {
           return params.hasOwnProperty(key);
       };

       this.push= function () {
           var hashBuilder = [], key, value;

           for(key in params) if (params.hasOwnProperty(key)) {
               key = escape(key), value = escape(params[key]); // escape(undefined) == "undefined"
               hashBuilder.push(key + ( (value !== "undefined") ? '=' + value : "" ));
           }

           window.location.hash = hashBuilder.join("&");
       };

       (this.load = function () {
           params = {}
           var hashStr = window.location.hash, hashArray, keyVal
           hashStr = hashStr.substring(1, hashStr.length);
           hashArray = hashStr.split('&');

           for(var i = 0; i < hashArray.length; i++) {
               keyVal = hashArray[i].split('=');
               params[unescape(keyVal[0])] = (typeof keyVal[1] != "undefined") ? unescape(keyVal[1]) : keyVal[1];
           }
       })();
    }

使用

检查是否存在“哈希键”:

 HashSearch.keyExists("thekey");

获取哈希键的值:

 HashSearch.get('thekey');

设置哈希键的值,并更新URL哈希:

 HashSearch.set('thekey', 'hey');

从网址中删除哈希密钥:

 HashSearch.remove('thekey');

将哈希重新加载到本地对象中:

 HashSearch.load();

将当前键值集推送到URL哈希:

 HashSearch.push();

请注意,当某个密钥不存在且您尝试get时,它将返回undefined。但是,密钥可能存在且没有值 - 例如#key=val&novalue其中novalue是没有值的密钥。如果您执行HashSearch.get("novalue"),它也会返回undefined。在这种情况下,您应该使用HashSearch.keyExists("novalue")来验证它确实是一个密钥。

答案 1 :(得分:10)

我用它,对我来说效果很好。它对我在某个地方选择的一条线路做了一点调整,我相信它。

getURLHashParameter : function(name) {

        return decodeURI(
            (RegExp('[#|&]' + name + '=' + '(.+?)(&|$)').exec(location.hash)||[,null])[1]
        );
    }, 

答案 2 :(得分:7)

window.location.hash应该会给你你想要的东西。

答案 3 :(得分:0)

jQuery BBQ(后退按钮和查询)利用HTML5 hashchange事件来允许简单但功能强大的可收藏的#hash历史记录。此外,jQuery BBQ提供了一个完整的.deparam()方法,以及散列状态管理和片段/查询字符串解析和合并实用程序方法。

简而言之:此库允许您动态更改页面中的哈希“查询字符串”并使URL匹配。它还允许您动态提取值并使用“查询字符串”规范化。最后,它将查询字符串添加到历史记录中,允许后退按钮用作先前查询哈希值之间的导航。

UX的一个很好的举措就是检查像jQuery BBQ这样的库:)