Javascript 从xml文件创建一个下拉列表,不包含重复的值。我需要数组吗?
我仍在学习javascript和xml,最近有人向我提出了一个问题,我相信这个问题很容易解决。如果可能的话,我希望能在这方面得到一些帮助 我在这里找到了一个xml文件 我目前正在使用这段代码创建一个下拉列表,其中只包含一个属性strArtistName中的值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
$(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的任何潜在问题。