Retrieve specific hash tag's value from url

前端 未结 4 1866
误落风尘
误落风尘 2020-12-13 16:59

In raw Javascript, how would one go about checking that a specific hash tag exists in a url, then grab the value?

Example: http://www.example.com/index.html#hashtag1

4条回答
  •  情歌与酒
    2020-12-13 17:06

        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];
               }
           })();
        }
    

    Using it:

    Check if a "hash key" is present:

     HashSearch.keyExists("thekey");
    

    Get the value for a hash key:

     HashSearch.get('thekey');
    

    Set the value for a hash key, and update the URL hash:

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

    Remove a hash key from the URL:

     HashSearch.remove('thekey');
    

    Reload the hash into the local object:

     HashSearch.load();
    

    Push the current key value set to the URL hash:

     HashSearch.push();
    

    Note that when a key does not exist and you try to get it, it will returned undefined. However, a key could exist with no value -- for example #key=val&novalue where novalue is a key with no value. If you do HashSearch.get("novalue") it would also return undefined. In which case, you should use HashSearch.keyExists("novalue") to verify that it is indeed a key.

提交回复
热议问题