0

我仍在学习 javascript 和 xml,最近遇到了一个我确信很容易解决的问题。如果可能的话,我希望对此有所帮助。

我有一个在这里找到的 xml 文件

http://mrblesid.com/blueprint/bookinglist.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>

我想避免重复为每个条目找到的艺术家姓名,我是否认为我需要为此使用数组?如果是这样,我该怎么做?

从列表中选择的名称应填充一个变量以在报告的其他地方使用。

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

在此先感谢,米奇

4

2 回答 2

0

首先,出于性能原因,您应该批处理 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);
}
于 2012-05-29T21:24:30.087 回答
0

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

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.

于 2012-05-29T21:30:26.597 回答