Javascript 从xml文件创建一个下拉列表,不包含重复的值。我需要数组吗?

Javascript 从xml文件创建一个下拉列表,不包含重复的值。我需要数组吗?,javascript,xml,arrays,variables,drop-down-menu,Javascript,Xml,Arrays,Variables,Drop Down Menu,我仍在学习javascript和xml,最近有人向我提出了一个问题,我相信这个问题很容易解决。如果可能的话,我希望能在这方面得到一些帮助 我在这里找到了一个xml文件 我目前正在使用这段代码创建一个下拉列表,其中只包含一个属性strArtistName中的值 $(document).ready(function(artists){ $.ajax({ type: "GET", url: "bookinglist.xml", dataType: "xml", succ

我仍在学习javascript和xml,最近有人向我提出了一个问题,我相信这个问题很容易解决。如果可能的话,我希望能在这方面得到一些帮助

我在这里找到了一个xml文件

我目前正在使用这段代码创建一个下拉列表,其中只包含一个属性strArtistName中的值

$(document).ready(function(artists){
$.ajax({
    type: "GET",
    url: "bookinglist.xml",
    dataType: "xml",
    success: function(artists_list) { 
        var select = $('#mySelect');
        $(artists_list).find('vw_ADM_BookingListNull[strArtistName]').each(function(){
            var artists = $(this).attr('strArtistName');
            select.append('<option value="'+artists+'">'+artists+'</option>');
            });
    select.children(":first").text("please make a selection").attr("selected",true);
    }
    });
});
然后通过以下命令将其调用到下拉列表中

<form>
  <select id="mySelect">
  <option>loading</option>
  </select>
</form>
我想避免重复在每个条目中找到的艺术家姓名,我认为我需要使用数组来完成这项工作,对吗?如果是这样,我该怎么做

从列表中选择的名称应填充一个变量,以便在报告中的其他位置使用

任何帮助都将不胜感激,因为我的最后期限迫在眉睫

提前感谢,,
Mikey

首先,出于性能原因,您应该批处理DOM插入。您还可以使用数组而不是纯字符串合并来压缩一点性能。这是您的成功函数,其中包括一些性能优化以及重复艺术家检查:

function(artists_list) { 
    var select = $('#mySelect'),
        html = [],
        artistArray = [];

    $(artists_list).find('vw_ADM_BookingListNull[strArtistName]').each(function(){
        var artists = $(this).attr('strArtistName');

        // Check the artistArray for a duplicate.
        // This will only work in more recent browsers.
        if (artistArray.indexOf(artists) === -1) {
            html.push('<option value="'+artists+'">'+artists+'</option>');
            artistArray.push(artists);
        }
    });

    // Join the HTML array and add it to the select element
    select.append(html.join(''))
      .children(":first").text("please make a selection").attr("selected",true);
}

数组将起作用。将主要部分更新为

var artistsArr = [];
$(artists_list).find('vw_ADM_BookingListNull[strArtistName]').each(function(){
    var artists = $(this).attr('strArtistName');
    if ($.inArray(artists, artistsArr) == -1) {
        select.append('<option value="'+artists+'">'+artists+'</option>');
        artistsArr.push(artists);
    }
});

有些浏览器不支持Array.indexOf,因此您可以使用jQuery的inArray。

当您说您希望避免重复为每个条目找到的艺术家名称时,您的意思是您只希望每个艺术家出现一次,而不是重复?是的,正是这样。很抱歉给你带来了困惑。由于每个艺术家都可以有多个预订,因此它们当前出现不止一次。我只希望他们的名字在下拉列表中出现一次。谢谢你。谢谢你的帮助!您好,很抱歉让您感到痛苦,但我还想使用所选的值来填充一个变量,以便在代码中的其他地方使用。所以我现在要做的是如何将mySelect的选定值传递到一个变量中。你能帮忙吗?当然。我想这就是您想要的var selectVal=$mySelect.val;。jQuery文档说这也适用于$mySelect选项:selected.val。但是第一个应该很好用。谢谢你的帮助Noah,但是我将使用上面的答案来解决indexOf的任何潜在问题。