我有一堆交互式活动,它们是通过读取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);
我确定它不是这样做的,但我不知道它应该如何。
提前致谢
答案 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。