【问题标题】:How save multiple js objects in SessionStorage?如何在 SessionStorage 中保存多个 js 对象?
【发布时间】:2022-01-19 01:38:24
【问题描述】:

我正在尝试使用按钮调用“.buttonClipboard”在 sessionStorage 中发送对象。但是只发一个。我想从表中发送更多对象。

这是代码:

$('#buttonsDocumentation .buttonClipboard').on('click', function(){
    clipboard = JSON.parse(sessionStorage.getItem("clipboard"));
    if($.inArray(rowSelected[0], clipboard) < 0){
        if(clipboard == null){
            clipboard = [];
        }
        clipboard.push(rowSelected[0]);
        sessionStorage.setItem('clipboard', JSON.stringify(clipboard));
    }
    testClipboard();
}); 

怎么样?

PD:rowSelected[0] 就像对象行中的 id。

【问题讨论】:

  • 你应该在调用$.inArray(). 之前检查clipboard == null 之前 否则你会收到来自$.inArray() 的错误。
  • 此外,如果尚未设置会话存储项,JSON.parse() 将收到错误消息。在尝试解析之前,您应该检查 getItem() 是否返回某些内容。
  • 除了这些问题之外,我看不出有什么理由不将所有对象都发送到会话存储。
  • @Barmar 代码一一发送对象,而不是二分之二或三分之三。当我选择一个文档和另一个文档时,剪贴板有两个文档。但我想选择多行发送到剪贴板

标签: javascript jquery session-storage


【解决方案1】:

要将多个选定的行添加到剪贴板,您需要将它们全部发送到push(),而不仅仅是selectedRow[0]。您可以为此使用扩展语法:

clipboard.push(...selectedRow);

【讨论】:

  • 或者,如果你不想改变剪贴板对象,你可以使用const newClipboard = [...clipboard, ...selectedRow]
  • @Barmar 感谢您的回复。我已经证明了这一点,但它并没有让我想要:(发送文件夹父级,其中包含从行中选择的文档,但不发送其他元素。
【解决方案2】:

我有一个替代方案,但只适用于一个表(tabDocument)而不是两个(tabSearch):

$('#buttonsDocumentacion .botonClipboard').on('click', function(){
    var idsClip=[];
    if(clipboard = tableDocument.rows('.selected').data()){
        for(var i=0; i<clipboard.length; i++){
            idsClip.push(clipboard[i][0]);
        }   
    }
    sessionStorage.setItem('clipboard', JSON.stringify(idsClip));
    compruebaClipboard();
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多