我正在使用jQuery来解析和输出XML。我有一个嵌套循环来输出TASKS的所有子项,但是每次迭代都会立即输出所有子项,而不是每行输出一个子项。
<xml version="1.0">
<choices>
<choice id="1" name="Type 1">
<description>
Example a
</description>
<tasks>
<task>Do this</task>
<task>Do that</task>
</tasks>
</choice>
<choice id="2" name="Type 2">
<description>
Example b
</description>
<tasks>
<task>Do other</task>
<task>Do something</task>
</tasks>
</choice>
</choices>
我的剧本:
$(function(){
"use strict";
//Above XML content is being passed as a string for this example
var str = "<xml version='1.0'><choices><choice id=\"1\" name=\"Type 1\"><description>Example a</description><tasks><task>Do this</task><task>Do that</task></tasks></choice><choice id=\"2\" name=\"Type 2\"><description>Example b</description><tasks><task>Do other</task><task>Do something</task></tasks></choice></choices></xml>";
var xmlDoc = $.parseXML(str);
var $xml = $(xmlDoc);
var temp = {};
$xml.find('choice').each(function() {
var $this = $(this);
temp.id = $this.attr('id');
temp.title = $this.attr('name');
temp.description = $this.find('description').text();
temp.choices = [];
var counter = 0;
$this.find('tasks').eq( counter ).each(function(index, child) {
document.write( $(child).find("task").text() + counter + "<br>");
counter++;
});
});
});
我希望为任务的孩子看到的输出:
Do this0
Do that1
Do other2
Do something3
我目前看到的输出:
Do thisDo that0
Do otherDo something0
答案 0 :(得分:0)
如果你需要做的就是打印任务,这可以简化为:
$xml.find('task').each(function (i) {
document.write($(this).text() + i + "<br>");
});
如果您需要choice
循环来执行此问题之外的其他操作,则可以将任务循环更改为:
$this.find('task').each(function() {
document.write( $(this).text() + counter + "<br>");
counter++;
});
并将counter
声明移到choice
循环
JSFiddle
(在jsfiddle中检查控制台,在实际代码中将console.log
更改回document.write
)
以上内容会遍历当前task
代码中的所有choice
代码。
如果您只是想看看tasks
的孩子而不管标签。你可以这样做:
$this.find('tasks').children().each(function() { ...
如果您想确保只找到task
的{{1}}个孩子,您可以这样做:
tasks
上述所有3个与您当前的xml具有相同的结果(这是您的预期结果)。
问题您在$this.find('tasks').children("task").each(function() {
循环中找到“任务”而不是每个“任务”,并从其中的所有each()
标记中获取文本。相反,循环执行每个单独的任务。
进一步细分原始代码的作用......
task