覆盖字符串中的属性

时间:2013-07-06 00:54:25

标签: javascript jquery

是否有人可以帮助我完成此功能。它假设要做的是在字符串中设置一个属性,并且首先用每个控件的冒号(:)分割该字符串,并检查是否存在id匹配,如果有,则检查是否存在属性匹配如果有一个属性覆盖该值,但我的函数似乎没有覆盖该属性,它只返回原始字符串。可以有人帮忙

var cookieValue = 'id=1&state=normal&theme=purple:id=2&state=maximized&theme=pink:id=3&state=maximized&theme=black';

var setProperties = function (cookie, id, prop, prop_value) {
    var windows = cookie.split(':');            

    var result = $.each(windows, function(index, value) {
        var temp1 = [];
        if(value.indexOf(id) > -1) {
            var temp2 = [];
            var properties = value.split('&');
            var result2 = $.each(properties, function(index, value) {

                if(value.indexOf(prop) > -1) {

                    temp3 = [];
                    temp3 = value.split('=');

                    temp3[1] = prop_value;  

                    temp2.push(temp3.join('='));
                }else {

                    temp2.push(value);
                }

                return temp2.join('&')

            });
            temp1.push(result2.join('&'));
            return temp1

        }
        else{
            temp1.push(value);  
        }
        return temp1;
    })
    return alert(result.join(':'));

}

setProperties(cookieValue, '2', 'theme', 'black');

2 个答案:

答案 0 :(得分:1)

尝试:

function setProperties(cookie, id , name, value) {
    var sections = $.map(cookie.split(":"), function (section) {
        var pairs, found = false;

        if (section.indexOf("id=" + id) === 0) {
            pairs = $.map(section.split("&"), function (pair) {
                if (pair.indexOf(name + "=") === 0) {
                    found = true;

                    return name + "=" + value;
                } else {
                    return pair;
                }
            });

            if (!found) {
                pairs.push(name + "=" + value);
            }

            return pairs.join("&");
        } else {
            return section;
        }
    });

    return sections.join(":");
}

答案 1 :(得分:0)

Each不会返回值。你有一些分号丢失我编辑了一点代码。 它不值得生产,但至少它会返回(部分)正确的值。

您必须弄清楚如何在cookie中替换该值。我认为正则表达式是最好的方法,或者当然你可以在函数之间传递temp1数组,但是你必须重新考虑你的代码。

var cookieValue = 'id=1&state=normal&theme=purple:id=2&state=maximized&theme=pink:id=3&state=maximized&theme=black';

var setProperties = function (cookie, id, prop, prop_value) {
    var windows = cookie.split(':');            

    var result = $.each(windows, function(index, value) {
        var temp1 = [];
        console.log('value' + value);
        console.log('windows'  + windows);
        console.log(cookieValue);
        if(value.indexOf(id) > -1) {
            var temp2 = [];
            var properties = value.split('&');
            var windows = $.each(properties, function(index, value) {

                if(value.indexOf(prop) > -1) {

                    temp3 = [];
                    temp3 = value.split('=');

                    temp3[1] = prop_value;  

                    temp2.push(temp3.join('='));
                }else {

                    temp2.push(value);
                }

                cookieValue  = temp2.join('&');

            });
            temp1.push(temp2.join('&'));
            cookieValue = temp1;

        }
        else{
            temp1.push(value);  
        }
        cookeValue =  temp1;
    })
console.log("new cookie" + cookieValue); // PRINTS new cookieid=2&state=maximized&theme=black

}
setProperties(cookieValue, '2', 'theme', 'black');