坚持动态构建一个javascript对象

时间:2012-02-06 16:09:25

标签: javascript object dynamic

我有一堆交互式活动,它们是通过读取XML文件中的所有参数而用flash编写的。我们正在远离FLASH,因此我正在编写一个脚本,它将读取我需要的XML元素并动态构建包含所有元素及其属性的javascript对象。最后,我通过JSON.stringify()传递对象并传回一个JSON化的版本。

我正在阅读XML,使用JQUERY调用ajax,然后混合使用JS和JQUERY。我喜欢它的DOM选择器的jquery。

我正在学习所有这些东西,因为我一直都是交易开发人员,所以当我到达需要使用.each()处理一堆元素时,我已经碰壁了。 。虽然我不确定,但我猜它是一种语法。一切都工作得很好,直到添加“面板”,在XML中看起来像+ ... 我必须处理每个小组。

$.ajax({
    type: "GET",
    url: "activity.xml",
    dataType: "xml",
    success: function(xml) {
        var activity = {
            title : {
                text: $(xml).find('title').text(), 
                xpos: $(xml).find('title').attr('xpos'), 
                ypos: $(xml).find('title').attr('ypos')
            },
        rubric : {
                text: $(xml).find('rubric').text(), 
                xpos: $(xml).find('rubric').attr('xpos'), 
                ypos: $(xml).find('rubric').attr('ypos')
            },
        panels: {
                $(xml).find('panel').each(function() {
                    panel :{width: $(this).attr('width'), 
                    height: $(this).attr('height'), 
                    xpos: $(this).attr('xpos'), 
                    ypos: $(this).attr('ypos')
            }});// end .each()
        }// end panels object
   });//end ajax.get(xml)   

   var activity_json = JSON.stringify(activity);

我确定它不是这样做的,但我不知道它应该如何。

提前致谢

1 个答案:

答案 0 :(得分:0)

你的问题必须在这里

panels: {
            $(xml).find('panel').each(function() {
                panel :{width: $(this).attr('width'), 
                height: $(this).attr('height'), 
                xpos: $(this).attr('xpos'), 
                ypos: $(this).attr('ypos')
        }});// end .each()

重写您的代码如下:

 var activity = {
        title : {
            text: $(xml).find('title').text(), 
            xpos: $(xml).find('title').attr('xpos'), 
            ypos: $(xml).find('title').attr('ypos')
        },
    rubric : {
            text: $(xml).find('rubric').text(), 
            xpos: $(xml).find('rubric').attr('xpos'), 
            ypos: $(xml).find('rubric').attr('ypos')
    },
    panels : []
 };



  $(xml).find('panel').each(function() {
           var data = {
                panel :{
                    width: $(this).attr('width')
                }, 
                height: $(this).attr('height'), 
                xpos: $(this).attr('xpos'), 
                ypos: $(this).attr('ypos')
           }
           activity.panels.push(data);
  });

修改

您正在打破对象文字的语法。您应该初始化一个数组并完成对象声明。然后迭代您的集合并用适当的值填充对象的panels属性。

修改

呀。我明白你的意思了。

Here是迭代你的dom元素的小提琴。我使用了原生的JavaScript api。我不是很熟悉,比如jQuery2XML。