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循环开头添加了两行。那将解决这个问题。