在 Javascript 中的 for 循环中更新 localStorage 变量



我正在使用JSTree来渲染我的一些目录和子目录。在js树中,我启用了复选框,当用户选择多个复选框时,我禁用第一个选择以启用第二个选择。以下是我的代码:

$(document).ready(function(){
    $("#annotateDirectories").jstree({
        "checkbox": {   
        'tie_selection' : false,        
        'two_state' : true 
    },
    'plugins': ['wholerow', 'search','checkbox', 'sort']
    });
    //control brand selection within annotated directories
    $('#annotateDirectories').on('check_node.jstree uncheck_node.jstree', function(e, data){
            var brandNode = data.instance.get_node(data.selected[1]);
        if(data.instance.get_checked().length>1){
          data.instance.uncheck_node(data.selected[0]);
            if (typeof brandNode.text === "undefined" || typeof brandNode.text === "") {
                alert("select a brand");
            } else {
                localStorage.clear();
                localStorage.setItem('brandNode', brandNode.text);
                show_message("Selected Brand: " +brandNode.text);   
            }
        }
        });
});

我正在将所选品牌存储在本地存储中。

在画布上,我正在绘制矩形。 对于每个绘制的矩形,我想从localStorage分配品牌名称。

以下是 for 循环的一部分。

function draw_all_region_id() {
  _iris_reg_ctx.shadowColor = "transparent";
  for ( var i = 0; i < _iris_img_metadata[_iris_image_id].regions.length; ++i ) {
    var canvas_reg = _iris_canvas_regions[i];
    var bbox = get_region_bounding_box(canvas_reg);
    var x = bbox[0];
    var y = bbox[1];
    var w = Math.abs(bbox[2] - bbox[0]);
    var brandName = (i+1);

现在有了(i+1),我可以将增量数字附加到边界框。 我面临的问题是当我更改

var brandName = localStorage.getItem("brandNode");

由于这是在 for 循环内,因此对于每个矩形,它都会分配相同的名称。 此外,当我绘制一个带有变量名称的新矩形时,所有早期矩形的名称都会更改为新名称。

您应该将项目存储在localStorage中,每个品牌的名称都是唯一的,否则任何具有相同键的新写入都将覆盖前一个。

您应该将值存储在本地存储中,如下所示。

  localStorage.setItem('brandNode' + uniqueId, brandNode.text);

应使用相同的密钥来重新访问它。

不要像您所做的那样熟练地清除本地存储

localStorage.clear();

而是从localStorage中删除特定项目

最新更新