2014-09-03 58 views
0

我在创建XML时发生了很大的问题。我只有用特制的ID连接与模式HTML节点:_header_firstLeveL_secondLevel_anotherLevel将HTMLCollection转换为ID阵列

HTML结构:

<input id="_movies_noGenre_documents_AnInconvenientTruth" type="text" value="A"> 
<input id="_movies_genre_horror_blackAndWhite_Saw" type="text" value="B"> 
<input id="_movies_genre_horror_blackAndWhite_Dracula" type="text" value="C"> 
<input id="_movies_genre_horror_color_It" type="text" value="D"> 
<input id="_movies_genre_comedy_blackAndWhite_DuckSoap" type="text" value="E"> 
<input id="_movies_genre_comedy_color_Hangover" type="text" value="F"> 
<input id="_movies_genre_comedy_color_Superbad" type="text" value="G"> 
<input id="_movies_genre_comedy_color_Anchorman" type="text" value="H"> 

和目标对象:

var object = [ 
    movies : { 
     noGenre : { 
      documents : { 
       AnInconvenientTruth : A 
      } 
     }, 
     genre: { 
      horror : { 
       blackAndWhite : { 
        Saw : B, 
        Dracula : C 
       }, 
       color : { 
        It : D 
       } 
      }, 
      comedy : { 
       blackAndWhite : { 
        DuckSoap : E 
       }, 
       color : { 
        Hangover : F, 
        Superbad : G, 
        Anchorman : H 
       } 
      } 
     } 
    } 
]; 

这一切都因为后来我拨通了这个迭代对象并准备字符串来构建一个XML来发送。

预先感谢您的想法!

+0

那么你的xml在哪里?你想创建JavaScript对象或XML? – Emech 2014-09-03 20:58:00

回答

1

您可以使用jQuery的解析HTML

var object = {} 
$("input").each(function() { 
     var id = $(this).attr("id"); 
     var id_parts = id.split("_"); 
     var tmp_obj = object; 
     for (var i=0; i<id_parts.length -1; i++) { 
      if (!tmp_obj[id_parts[i]]) 
        tmp_obj[id_parts[i]] = {}; 
      tmp_obj = tmp_obj[id_parts[i]]; 
     } 
     tmp_obj[id_parts[id_parts.length -1]]=$(this).val(); 
}); 

试试这个,我希望这会帮助你。

+0

Emech你救了我的命! :-)你能解释一下它是如何工作的吗?请在speciall var tmp_obj = object部分。 – cachaito 2014-09-04 13:37:55

+1

你有一个嵌套的属性,用下划线分隔。你可以使用递归函数或者像我一样的东西。对于每个输入元素,我将键分开,然后对于每个键,我检查“对象”是否有键,所以我会去下一个嵌套属性。在“var tmp_obj = object”中,我们的tmp_obj与对象不是它的副本相同,所以它的每一个变化都将保存到对象变量中。在Java脚本中,您可以使用“object.key”或object [“key”]属性,因此我使用第二个用“_”分隔的动态属性。 – Emech 2014-09-06 07:09:06

+0

再次感谢你! – cachaito 2014-09-10 19:51:23