1

我已经将动态创建的对象作为字符串存储在数据库中,因为我缺乏更好的选择知识,此时我认为没有回头路了。我试图以某种方式解析它,以便用户无法以某种方式破坏它。

我输出一个格式为的字符串

    |attr1|,subA,subB,subNth,~,|attrNth|,sub2A,sub2B,sub2C,sub2D,~

第一个然后通过做拆分它

    supertest = option.split("~");

离开我

    |attr1|,subA,subB,subNth,,,|attrNth|,sub2A,sub2B,sub2C,sub2D,,

第二我循环查找我的管道符号,然后再次拆分

   for(n=0; n<supertest.length; n++) {

        var start_pos = supertest[n].indexOf('|') + 1;
        var end_pos = supertest[n].indexOf('|',start_pos);
        var optionParsed = supertest[n].substring(start_pos,end_pos);
        test = supertest[n].split("|").pop();

        choiceArray = test.split(",");
        }

给我留下 3 个动态创建名称的数组(我只想要两个)

 array1- ,subA,subB,subNth,
 array2- ,sub2A,sub2B,sub2C,sub2D,
 array3- blank or null or undefined?

JSFIDDLE:http: //jsfiddle.net/SteveRobertson/4YHSr/21/

我最终试图创建动态选择输入列表,其中“attr”作为标签,“subNths”作为选项。所以我尝试创建一个 jsfiddle 以使其更容易,因为我现在意识到这是一个比我最初想象的更大的问题,但是由于某种原因,在三个选择下拉列表完成加载后,一切都消失了。我试过了。如果有人可以帮助我,我将不胜感激。我理想地想知道的是我怎样才能让我的个人数组成为格式

attr1 = [subA, subB, subNth]

感谢任何认为他们可能知道这一点并可以提供帮助的人

4

2 回答 2

1

我希望,下面的工作代码可以说服您使用 JSON 来存储分层数据;)是的,它只是解析部分。

var zzz = '|attr1|,subA,subB,subNth,~,|attrNth|,sub2A,sub2B,sub2C,sub2D,~'
   .split('~')
   .filter(function(v){return !!v;})
   .map(function(v) {
       var a = v.replace(/(^,)|(,$)/, '')
          .split(',');
       var o = {};
       o[a[0].replace(/\|/g, '')] = a.slice(1);
       return o;
   }); 

// now, lets see what we have done:
JSON.stringify(zzz); 
// and the output is:
"[{"attr1":["subA","subB","subNth"]},{"attrNth":["sub2A","sub2B","sub2C","sub2D",""]}]" 
于 2013-06-06T21:21:52.833 回答
1

如果我们选择忽略您确实需要重构代码并实施更健壮、可靠和可维护的解决方案来存储此类数据的事实(JSON 听起来是一个不错的选择),那么您的主要问题是:

  • 您的提交按钮上有一个回调,这意味着,在您执行回调并select创建 s 之后,您的表单被提交(在这种情况下无处)并且您的页面被重新加载(实际上导致您的更改丢失)。

您所要做的就是return false;在提交回调的末尾添加,这将阻止表单被提交。

当相应的标记为空时,您可能还想添加几个检查以省略options(或s)。select这样的事情会做:

for (var n = 0; n < supertest.length; n++) {
    if (supertest[n] == "") { continue; }
    ...
    for (var j = 0; j < choiceArray.length; j++) {
        if (choiceArray[j] == "") { continue; }
        ...
    }
    ...
}
...
return false;

另请参阅这个简短的演示

于 2013-06-06T21:22:06.583 回答