Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在URL中编辑锚定的一部分_Javascript_Jquery_Anchor - Fatal编程技术网

Javascript 如何在URL中编辑锚定的一部分

Javascript 如何在URL中编辑锚定的一部分,javascript,jquery,anchor,Javascript,Jquery,Anchor,我有获取锚定部分的代码: function _get_part(queryString, name) { var match = '&' + name + '='; var i = queryString.indexOf(match); if(i < 0) { match = name + '='; if(queryString.slice(0, match.length) == match) i = 0; } if(i >

我有获取锚定部分的代码:

function _get_part(queryString, name) {
  var match = '&' + name + '=';
  var i = queryString.indexOf(match);

  if(i < 0) {
    match = name + '=';
    if(queryString.slice(0, match.length) == match)
      i = 0;
  }

  if(i > -1) {
    i += match.length;
    return queryString.slice(i, queryString.indexOf('&', i) >>> 0);
  }
};

function get_location_hash() {
    return window.location.hash.substr(2);
}

function get_part(name) {
    return _get_part(get_location_hash(), name);
}
但是如果锚的部分不存在,锚就不会改变

URL格式:…page/#/var1=blablabla&var2=var2text&gghh=edere

Anchor-#/var1=blablabla&var2=var2text&gghh=edere

对不起,我的英语不好

非常感谢

更新:


太棒了,非常感谢! 只有一个问题:我加载页面时没有任何锚: …/页/ nex使用此代码:

set_part(get_location_hash(), 'filter', 'data');
set_part(get_location_hash(), 'filter2', 'data2');
set_part(get_location_hash(), 'fdgfg', 'fdgfdg');
alert(get_part('fdgfg'));
并接收…/page/#/=&filter=data&filter2=data2&fdgfg=fdgfdg


如何删除第一个“=”符号?

如果url哈希中已经存在
键,则函数可以正常工作

例如,如果您的url为:

http://example.com/whatever.html#/var1=blablabla&var2=var2text&gghh=edere
然后,像这样调用
set\u part()

set_part(get_location_hash(), 'var2', 'bar');
alert( 'hash before: '+window.location.hash );

set_part( window.location.hash, 'var2', 'bar');
set_part( window.location.hash, 'foo', 'foovalue');

alert( 'hash after: '+window.location.hash );
将按如下方式更改哈希:

http://example.com/whatever.html#//var1=blablabla&var2=bar&gghh=edere
注意:它正确地更改了
var2
的值。但它确实在开头添加了一个额外的斜杠

问题是,如果以前不存在这样的键,它将不会添加参数。如果您想这样做,那么我推荐如下内容:

function _parseQueryString( queryString ) {
    var pairs = queryString.split('&');
    var params = {};
    for(var i=0; i<pairs.length; ++i ) {
       pairs[i] = pairs[i].trim();
       if( pairs[i] == '' ) continue;

        var parts = pairs[i].split('=');
        if( parts.length == 0 ) continue;
        var name = parts.shift();
        var value = '';
        while(parts.length) {
            value += parts.shift();
        }
        params[name]=value;
    }
    return params;
}

function _buildQueryString( params ) {
    var queryString = "";
    for( var i in params ) {
        if( queryString.length > 0 ) queryString += "&";
        queryString += (i + '=' +params[i]);
    }
    return queryString;
}

function set_part(queryString, key, value) {
    /* first remove the leading '#/', if any */
    if( queryString.indexOf('#')==0 ) {
        queryString = queryString.substring(1);
    }
    if( queryString.indexOf('/')==0 ) {
        queryString = queryString.substring(1);
    }

   /* now parse the hash (in queryString format) into 
      an object containing all the parts */
   var params = _parseQueryString(queryString);

   /* finally, just set the value in the params object, 
      and rebuild the query string, adding 
      in the slash again 
   */
   params[key]=value;
   window.location.hash = '/' + _buildQueryString(params);
}
你这样称呼它:

set_part(get_location_hash(), 'var2', 'bar');
alert( 'hash before: '+window.location.hash );

set_part( window.location.hash, 'var2', 'bar');
set_part( window.location.hash, 'foo', 'foovalue');

alert( 'hash after: '+window.location.hash );
然后您可以看到这两种形式都正常工作


你可以。

太棒了,非常感谢!只有一个问题:我加载页面时没有任何锚:http://.../page/ nex使用以下代码:set_part(get_location_hash(),'filter','data');设置部分(获取位置散列(),'filter2','data2');设置部分(获取位置散列(),'fdgfg','fdgfdg');警报(获取部件(“fdgfg”);接收http://.../page/#/=&filter=data&filter2=data2&fdgfg=fdgfdg 如何删除第一个“=”符号?哦。我在
\u parseQueryString()
中的for循环开头添加了两行。那将解决这个问题。