0

私はまだ javascript と xml を学んでいますが、最近、簡単に解決できると確信している問題が提示されました。可能であれば、これに関する助けを期待しています。

ここにあるxmlファイルがあります

http://mrblesid.com/blueprint/bookinglist.xml

現在、このコードを使用して、属性「strArtistName」の 1 つだけの値を含むドロップダウン リストを作成しています。

$(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 に答える