【问题标题】:Read and write data to cookie in arrays读取和写入数据到数组中的 cookie
【发布时间】:2012-12-16 06:55:36
【问题描述】:

我想要实现的是在 cookie 中存储 2 个数组,例如:["reminder1","reminder2"]``["time1","time2"]

两个 ` 字符用于分隔两个数组。

使用我拥有的当前代码,cookie 的值只是reminder1,time1,就是这样。

我确实在这里做错了,但在这一点上,我不知道如何解决这个问题。

到目前为止我的代码:

标记:

<table id="reminders">
    <thead>
        <tr>
            <td>Emlékeztető szövege</td>
            <td>Időpont</td>
            <td>Műveletek</td>
        <tr>
    </thead>
    <tbody>
        <tr class="remdef">
            <td class="remtxt"><em>Kattints a módosításhoz!</em></td>
            <td class="remtim"><input type="text" class="datepicker"></td>
            <td class="remope" style="opacity:1.0;"></td>
        <tr>
    </tbody>
</table>

脚本:

var addnew_html = '<span class="typicn plus '+readCookie('nev')+'" onclick="remtbl(\'addnew\')"></span>';
var modify_html = '<span class="typicn edit '+readCookie('nev')+'" onclick="remtbl(\'modify\')"></span>';
var remove_html = '<span class="typicn times '+readCookie('nev')+'"  onclick="remtbl(\'remove\')"></span>';

$('#reminders tbody tr.remdef td.remtxt em').click(function(){
    defhtml = '<em>'+$(this).html()+'</em>';
    $(this.parentNode).html('<textarea width="100%" cols="50" id="rem-editing" class="rem-edit'+$('#reminders tbody tr').index($(this).parents('#reminders tbody tr'))+'"></textarea>');
    changeModifOptions($('#reminders tbody tr.remdef td.remope'),['addnew']);
});

function changeModifOptions(selector,options){
    $(selector).html(function(){
        return  ((!(options.indexOf('addnew'))) ? addnew_html : '' )+((!(options.indexOf('modify'))) ? modify_html : '')+((!(options.indexOf('remove'))) ? remove_html : '');
    });
}

function remtbl(cmd){
    if (cmd == 'addnew'){
        var cookieval = readCookie('reminder');
        createCookie('reminder',($('#reminders tbody tr.remdef td.remtxt textarea').val().replace('<','&lt;').replace('>','&gt;')+','+$('#reminders tbody tr.remdef td.remtim input.datepicker').val()+( (cookieval) ? '``'+cookieval : '')),parent.longtime);
        $('#reminders tbody').append('<tr class="remelm"><td class="remtxt">'+Array(readCookie('reminder').split('``'))[0]+'</td><td class="remtim"><input type="text" class="datepicker" value="'+Array(readCookie('reminder').split('``'))[1]+'"></td><td class="remope" style="opacity:1.0;"></td><tr>')
        changeModifOptions($('#reminders tbody tr td.remope:last'),['modify','remove']);
        $('#reminders tbody tr.remdef td.remtim input.datepicker').val('');
        $('#reminders tbody tr.remdef td.remope').html('');
    }
}

【问题讨论】:

  • 您在 javascript 中的 string.split 采用正则表达式,反引号可能意味着那里的某些东西并且必须转义。尝试使用不同的分隔符(例如逗号)来查看它是否有效。
  • @EricLeschinski 事实并非如此。
  • @Andreas 我认为解析是我需要的,但我该如何实现呢?
  • “伪”代码,因为您的代码对我来说不是那么可读(至少在我目前的情况下^^)var cookieval = [ ["reminder1","reminder2"], ["time1","time2"] ]; saveCookie(JSON.stringify(cookieval)); cookieval = JSON.parse(readCookie());

标签: javascript jquery html arrays cookies


【解决方案1】:

正如@Andreas 建议的那样,您可以使用JSON.stringify( array) 将数组转换为JSON 字符串,然后使用JSON.parse( string) 将其返回到javascript 数组

例子

var arr=['a','b','c'];
var json=JSON.stringify(arr);

createCookie('reminder', json);

var arrayFromCookie= JSON.parse( readCookie('reminder'));

对于不支持 JSON 对象的旧浏览器,请包含 json.js 库

【讨论】:

    【解决方案2】:

    javascript string.split 的第一个参数采用字符或正则表达式。在您发布的代码中,您都没有做这些。

    http://www.w3schools.com/jsref/jsref_split.asp

    要使其成为有效的正则表达式,请使用斜杠 backtic backtic slash。像这样:

    /``/
    

    【讨论】:

    • 但是,添加正则表达式并不能改变 cookie 设置不正确的事实。
    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多