Javascript .每个函数在XML中迭代两次

Javascript .每个函数在XML中迭代两次,javascript,jquery,html,xml,Javascript,Jquery,Html,Xml,我试图用jquery遍历xml并将其发布到html上。出于某种原因,authors中的每个函数都附加了重复项。例如,我会让詹姆斯·麦戈文珀·博特内尔库尔特·卡列詹姆斯·林恩·瓦里亚纳赞比纳加扬,詹姆斯·麦戈文珀·博特内尔库尔特·卡列詹姆斯·林恩·瓦里亚纳赞比纳加扬。我在想我怎么才能解决这个问题?谢谢 <book category="web"> <title lang="en">XQuery Kick Start</title> <author>Ja

我试图用jquery遍历xml并将其发布到html上。出于某种原因,authors中的每个函数都附加了重复项。例如,我会让詹姆斯·麦戈文珀·博特内尔库尔特·卡列詹姆斯·林恩·瓦里亚纳赞比纳加扬,詹姆斯·麦戈文珀·博特内尔库尔特·卡列詹姆斯·林恩·瓦里亚纳赞比纳加扬。我在想我怎么才能解决这个问题?谢谢

<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>

$(document).ready(function() {
$.ajax({

     url: "books.xml",
     dataType: "xml",
     success: function(data) {

        $(data).find('book').each(function(){
        var category = $(this).attr('category');
        var title = $(this).find('title').text();
        var year = $(this).find('year').text();
        var price = $(this).find('price').text();
        var author = $(this).find('author').text();

        $(this).find('author').each(function(){
            author += $(this).text();
            author += ',';
        });

        var r = '<tr>';
        r += '<td>' + title + '</td>';
        r += '<td>' + author + '</td>';
        r += '<td>' + year + '</td>';
        r += '<td>' + price + '</td>';
        r += '<td>' + category + '</td>';

        $('table').append(r);
        });

     },
     error: function() { alert("error loading!");  }
 });

});

XQuery启动
詹姆斯·麦戈文
伯特纳
库尔特·卡格尔
詹姆斯·林恩
瓦迪亚纳坦·纳加拉扬
$(文档).ready(函数(){
$.ajax({
url:“books.xml”,
数据类型:“xml”,
成功:功能(数据){
$(数据)。查找('book')。每个(函数(){
var category=$(this.attr('category');
var title=$(this.find('title').text();
var year=$(this.find('year').text();
var price=$(this.find('price').text();
var author=$(this.find('author').text();
$(this).find('author').each(function(){
author+=$(this.text();
作者+=',';
});
var r='';
r+=''+标题+'';
r+=''+作者+'';
r+=''年+'';
r+=''价格+'';
r+=''+类别+'';
$('table')。追加(r);
});
},
错误:函数(){alert(“错误加载!”);}
});
});

首先将auther设置为
$(this).find('author').text()
,然后在每个行中追加行。这会导致列表重复

您可能应该将第一个赋值替换为
var author=''

需要替换的赋值

var author = $(this).find('author').text();

第一个将连接所有这些元素的文本,没有任何空格。。。然后你在元素上循环并添加到元素中

要去除
作者中的尾随逗号,可以更改为:

var author =[];
$(this).find('author').each(function(){
    author.push( $(this).text());
});    
author = author.join(', ');

// or

var author = $(this).find('author').map(function(){
      return $(this).text();
}).get().join(', ');
var author =[];
$(this).find('author').each(function(){
    author.push( $(this).text());
});    
author = author.join(', ');

// or

var author = $(this).find('author').map(function(){
      return $(this).text();
}).get().join(', ');