Javascript 从URL中的哈希中获取多个值

Javascript 从URL中的哈希中获取多个值,javascript,jquery,Javascript,Jquery,在页面加载时,我想获取整个哈希值,即#look0&product1 然后将其拆分并将外观编号ie0保存在一个名为var-look的变量中,将产品编号ie1保存在另一个名为var-product的变量中。不知道如何实现这一点 这也是传递和检索此类参数的最佳方式吗?谢谢使用var myHash=location.hash获取URL的哈希部分。然后执行var params=myHash.split('&'),然后对每个部分执行part.split('='),以获取键值对 也许通过PHP端的GET传递

在页面加载时,我想获取整个哈希值,即
#look0&product1
然后将其拆分并将外观编号ie
0
保存在一个名为
var-look
的变量中,将产品编号ie
1
保存在另一个名为
var-product
的变量中。不知道如何实现这一点


这也是传递和检索此类参数的最佳方式吗?谢谢

使用
var myHash=location.hash
获取URL的哈希部分。然后执行
var params=myHash.split('&')
,然后对每个部分执行
part.split('=')
,以获取键值对


也许通过PHP端的GET传递这些参数比通过PHP处理页面时在页面内发布这些参数更好

www.domain.com/lookbook.html#look0&product1

以下是纯Javascript方法:

<input type="hidden" name="look" value="<?php echo isset($_GET['look']) ? $_GET['look'] : '';?>"/>
使用类似于:

function parseHash(hash) {
  // Remove the first character (i.e. the prepended "#").
  hash = hash.substring(1, hash.length);

  // This is where we will store our properties and values.
  var hashObj = {};

  // Split on the delimiter "&" and for each key/val pair...
  hash.split('&').forEach(function(q) {
    // Get the property by splitting on all numbers and taking the first entry.
    var prop = q.split(/\d/)[0];
    // Get the numerical value by splitting on all non-numbers and taking the last entry.
    var val_raw = q.split(/[^\d]/);
    var val = val_raw[val_raw.length - 1]

    // If the property and key are defined, add the key/val pair to our final object.
    if (typeof prop !== 'undefined' && typeof val !== 'undefined') {
      hashObj[prop] = +val;
    }
  });

  return hashObj;
}
我建议使用norm通过位置的散列传递值:
prop=value
。例如:
#book=10&id=311
。然后您可以轻松地对每个属性使用
=
进行拆分。

您可以使用
.match(re)
方法并使用正则表达式从给定字符串中提取数字

您可以尝试以下方法:

parseHash(window.location.hash /* #book10&id1483 */)
/* returns: Object {book: 10, id: 1483} */
var loc=“look0345345&product1”;
var hashes=loc.split('&');
var values=hashes.map(函数(hash){return hash.match(/\d+/)[0];});
document.body.innerHTML=''+JSON.stringify(值)+''您可以尝试以下方法:

var hashes = location.hash.split('&'); // get the hash and split it to make array
var values = hashes.map(function(hash){ // use .map to iterate and get a new array
    return hash.match(/\d+/)[0]; // returns the numbers from the string.
});
var url='www.domain.com/lookbook.html#look0&product1'
,结果={}
,expr=RegExp(/[#和]([a-zA-z]+)(\d+)/g);
var parts=expr.exec(url);
while(parts!=null&&parts.length==3){
结果[部分[1]]=部分[2];
parts=expr.exec(url);
}
var look=result['look']
,product=结果['product'];
document.getElementById('result').innerHTML='look='+look+'
'+'product='+product

您应该使用:

函数parseHash(hash){
hash=hash.substring(1,hash.length);//删除第一个字符(#)
var obj={};//创建输出
var qa=hash.split('&');//拆分数组中的所有参数
对于(变量i=0;i


不,您应该使用
look=0&product=1
@usandfriends我现在看到了。。。有史以来最差的参数传递方法。RegEx-than查找数字(如果名称类似于
param1,值是文本的,则会出现问题。op没有提到使用PHP。(并非所有人都是;)@nothing9如果您使用诸如产品id(?)之类的跟踪参数,则必须有数据库-使用某种后端编程语言。@Justinas-No,不一定。但别客气。你的回答提供了更多的想法,当然这没有坏处!我添加了一些解释@Justinas。