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
然后将其拆分并将外观编号ie0
保存在一个名为var-look
的变量中,将产品编号ie1
保存在另一个名为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。