【问题标题】:convert HTMLCollection to Array by ID按 ID 将 HTMLCollection 转换为数组
【发布时间】:2014-09-03 20:32:52
【问题描述】:

我在创建要发送的 XML 时遇到了一个大问题。我所拥有的只是与带有架构的特殊构建 ID 连接的 HTML 节点:_header_firstLeveL_secondLevel_anotherLevel

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。

提前感谢您的想法!

【问题讨论】:

  • 那么你的 xml 在哪里?你想创建 javascript 对象或 xml?

标签: arrays xml loops htmlcollection


【解决方案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();
});

试试这个,希望对你有帮助。

【讨论】:

  • Emech 你救了我的命! :-) 你能解释一下它是如何工作的吗?请在 speciall var tmp_obj = object 部分中。
  • 你有一个嵌套属性,用下划线分隔。你可以使用递归函数或像我一样的东西。对于每个输入元素,我将键分开,然后对于每个键,我检查“对象”是否具有键,因此我将使用下一个嵌套属性。在“var tmp_obj = object”中,我们的 tmp_obj 与 object 相同,而不是它的副本,因此它的每次更改都将保存到 object 变量中。在 java 脚本中,您可以通过“object.key”或 object[“key”] 使用属性,所以我将第二个用于由“_”分隔的动态属性。
猜你喜欢
  • 2021-09-19
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多