0

我正在尝试制作一个脚本以在 window.location.hash 中使用多个值,但我遇到了 jquery 的 $.extend() 函数的问题

我尝试了两种方法,但都没有成功。

var MultiHash = {
    params: {},

    getHash: function () {
        var hashString = document.location.hash.replace('#', '').split('&');

        for (var i=0; i < hashString.length; i++) {
            var key = hashString[i].split('=')[0];
            var value = decodeURIComponent(hashString[i].split('=')[1]);

            // First way
            var a = {key: value};

            // Second way
            var a = {};
            a[key] = value;

            $.extend(params, a);
        }

        return params;
    },

    ...
}

有没有人看到问题?

4

3 回答 3

3

首先你应该写:

 $.extend(this.params, a); or you cant access param

可能还有其他问题。

编辑

在我看来,你返回 a 而不是 this.params 是有道理的。

$.extend(a,this.params);

return a 
于 2012-05-18T16:00:56.323 回答
3

您尝试做的事情有两个问题。第一个是引用问题,因为该对象的 params 变量应引用为this.params. 第二个问题是您没有保存对象扩展的结果。所有这些都发生在以下行中:

$.extend(params, a);

它应该改为:

this.params = $.extend(this.params, a);
于 2012-05-18T16:04:08.403 回答
0

试试这个:

var MultiHash = {
    params: {},

    getHash: function () {
        var hashString = document.location.hash.replace('#', '').split('&');

        var a = [];
        for (var i=0; i < hashString.length; i++) {
            var key = hashString[i].split('=')[0];
            var value = decodeURIComponent(hashString[i].split('=')[1]);
            a.push(key + ":'" + value + "'");           
        }

        $.extend(this.params,(new Function("return {" + a.Join(",") + "}"))());

        return this.params;
    },

    ...
}
于 2012-05-18T16:04:28.777 回答