Javascript替换字符串中的值

时间:2014-02-04 09:53:31

标签: javascript

根据我的要求,我按照以下方式构建了一个Javascript字符串:

var empDetails= "ID=" + id + ";" + "Name=XYZ" + ";" + "Address=ABC";
// id is autoincremented like 1,2,3 and so on.

if (sessionStorage.getItem('empDet') === null) {
    sessionStorage.setItem('empDet', empDetails);
} else {
    var empDets= sessionStorage.getItem('empDet');
    var pResult = empDets;
    if (pResult.length > 0) {
        var ptotalEmp= empDets.toString().concat(';' + empDetails.toString());
        sessionStorage.setItem('empDet', ptotalEmp);
    }
}

现在,我需要提供一些选项来编辑以下详细信息,如果用户选择了一些ID,如果他更改了与Name and Address相关的一些内容,我需要更新并存储。有人能帮我吗?

4 个答案:

答案 0 :(得分:3)

你可以存储一个我认为比处理字符串更好的对象。如果你有一个像这样的对象:

var user = { id: 1, name: "ABC", address: "DEF" };

您可以使用JSON.stringify stringify 来存储在本地存储上。然后使用 JSON.parse

检索它
sessionStorage.setItem('user', JSON.stringify(user));
var u = JSON.parse(sessionStorage.getItem('user'));

现在将它用作对象:

u.name = "Foo";
u.address = "Bar";

Fiddle上查看。

顺便说一下,你可以轻松地使用一个功能。

答案 1 :(得分:2)

这个更好的方法是你可以在你使用现有的empDetails连接新的empDetails的地方使用其他一些角色。

EG。您可以在下面的代码中将其更改为var ptotalEmp= empDets.toString().concat('|' + empDetails.toString()); ..

if (sessionStorage.getItem('empDet') === null) {
                sessionStorage.setItem('empDet', empDetails);
            }
            else {
                var empDets= sessionStorage.getItem('empDet');
                var pResult = empDets;
                if (pResult.length > 0) {
                    var ptotalEmp= empDets.toString().concat('|' + empDetails.toString());
                    sessionStorage.setItem('empDet', ptotalEmp);
                }
            }

现在您可以使用'|'符号吐出每个emp详细信息,然后获取详细信息,更新并存储。

答案 2 :(得分:0)

怎么样:

var empDetails= "ID=" + id + ";" + "Name=XYZ" + ";" + "Address=ABC";
function updateDetails(str,name,addr) {
    var reg = /ID=(\d+);Name=(.*?);Address=(.*?)$/;
    var fin = reg.exec(d);
    return "ID="+fin[1]+";"+"Name="+(name?name:fin[2])+";"+"Address="+(addr?addr:fin[3])+";";
}
updateDetails(empDetails,"replacement");

答案 3 :(得分:0)

好的,完成了!我创建了3个函数来设置,获取和清除特定的sessionstorage项。

以下是代码:

function setValue(){
    var id = document.getElementById("id"),
        name = document.getElementById("name"),
        address = document.getElementById("address"),
        item = "ID=" + id.value + ";NAME=" + name.value + ";ADDRESS=" + address.value;

    if(sessionStorage.getItem('empDet')){
        var existing = getValue().split("||"),
            repaced = false;

        for(var i = 0; i<existing.length; i++){
            if(existing[i].split(";")[0].split("=")[1] == id.value){
                existing[i] = item;
                repaced = true;
            }
        }

        item = repaced ? existing  : existing + "||" + item;
    }
    sessionStorage.setItem('empDet', item);    
    id.value = name.value = address.value = "";
}

function getValue(cry){
    var existing = sessionStorage.getItem('empDet');
    if(cry){
        alert(existing);
    }
    return existing;
}

function clearValue(){
    sessionStorage.removeItem('empDet');
}

工作演示:http://jsfiddle.net/ashishanexpert/hu2V3/1/

您可以根据自己的需要进行自定义。

===================编辑=================== < / p>

在评论中有一个建议,即使用JSON对象比使用String更好,这非常有用。所以,稍微更新了代码,现在它是基于JSON的。

function setValue(){
    var id = document.getElementById("id"),
        name = document.getElementById("name"),
        address = document.getElementById("address"),
        item = {
            ID : id.value,
            NAME : name.value,
            ADDRESS : address.value
        },
        allTogether = [],
        repaced = false;

    if(sessionStorage.getItem('empDet')){
        allTogether = JSON.parse(getValue());

        for(var i = 0; i < allTogether.length; i++){
            if(allTogether[i].ID == id.value){
                allTogether[i] = item;
                repaced = true;
            }
        }
    }

    if(!repaced){
        allTogether.push(item);
    }

    sessionStorage.setItem('empDet', JSON.stringify(allTogether));    
    id.value = name.value = address.value = "";
}

更新演示:http://jsfiddle.net/ashishanexpert/hu2V3/2/