<?xml version="1.0"?>
<watchlist timestamp="2013-02-04 17:38:24">
<team name="Parent">
<child name="ChildTeam1" team="3">
<client mnem="c1">5</client>
<client mnem="c2">0</client>
<client mnem="c3">1</client>
<client mnem="c4">1</client>
<client mnem="c5">2</client>
<client mnem="c6">6</client>
<client mnem="c7">0</client>
<client mnem="c8">0</client>
<client mnem="c9">1</client>
<client mnem="c10">0</client>
</child>
<child name="ChildTeam2" team="3">
<client mnem="c1">6</client>
<client mnem="c2">0</client>
<client mnem="c3">0</client>
<client mnem="c4">0</client>
<client mnem="c5">0</client>
<client mnem="c6">0</client>
<client mnem="c7">0</client>
<client mnem="c8">0</client>
<client mnem="c9">0</client>
<client mnem="c10">0</client>
</child>
</team>
</watchlist>
我需要帮助使用jQuery解析上面的XML。有一些家长团队,其中有儿童团队。我的目标是将团队ID为3的父团队的总c1相加......所以在上面的示例中,为了获得c1的总数,我将添加在ChildTeam1中找到的5和在ChildTeam2中找到的6 c1总共得到11。
要添加扭曲...客户端上的mnem属性会定期更改,因此我无法硬编码来过滤“c1”,我必须动态拉动该部分。我知道,虽然孩子下面总会有10个客户。
有什么想法吗?
我到目前为止的代码,它确实正确计算了团队3的c1总数,为mnem属性使用了一个过滤器(我试图从mnem更改后离开):
function parseXml(data) {
var count1 = 0;
$(data).find("child[team='3']").each(function(child) {
count1 += parseInt($(this).find("client[mnem='c1']").text(), 10);
});
alert(count1); //output total c1 for team 3
}
function parseXml(data) {
var i = 0;
var mnemonic = new Array();
//build array of the 10 mnemonics, with mnemonic as key value
$(data).find("client").each(function(){
if ( i < 10 ) {
mnemonic[$(this).attr('mnem')] = 0; //set default count to 0
i++;
} else { return false; } //break .each loop
});
//find all children where team = 3, and add the numbers up for each client mnemonic
$(data).find("child[team='3']").each(function() {
for(var index in mnemonic) {
//add to the count
mnemonic[index] += parseInt($(this).find("client[mnem="+index+"]").text(), 10);
}
});
//output the results
for(var index in mnemonic) {
$("#output").append( index + " : " + mnemonic[index] + "<br />");
}
}
答案 0 :(得分:1)
您是否只是将c1
更改为其他内容?这只是在选择器中编辑字符串的问题:
function parseXml(data) {
var count = 0,
teamnum = 3,
counter = 'c1';
$(data).find("child[team="+count+"]").each(function(i,el) {
count1 += parseInt($(this).find("client[mnem="+counter+"]").text(),10);
});
alert(count1); //output total c1 for team 3
}
答案 1 :(得分:0)
将"client[mnem='c1']"
替换为"client[" + attrname +"='c1']"
,您可以非常轻松地处理这件事。你需要什么吗?