嗨我是jquery或javascript的新手,不知道有什么区别..我尝试读取xml文件并将该xml中的某些值显示到下拉列表中(选择)。使用的ajax方法读取xml ok,但是在我的下拉列表中我有多个相同的条目,所以我需要将这些条目放入某种容器中并循环遍历它们以删除它们。 到目前为止我已经
了var XML_MAP_PATH = "/resources/XML/MapInformationXML.xml";
var selectedSiteName;
var buildingName;
$(document).ready(function () {
//Clear all drop down lists
$('#cboSiteNames >option').remove();
$('#cboFloors >option').remove();
//Read XML file and populate cboSiteNames drop down list
$.ajax({
type: "GET",
crossDomain: true,
url: XML_MAP_PATH,
context: document.body,
dataType: "xml",
xhrFields: { withCredentials: true },
success: function (xml) { //If data is available(success) then..
$(xml).find('Map').each(function () { //go to parent node in xml
siteName = $(this).attr("Site"); //add all site names to siteName var
$("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist
});
}
});
});
XML
<?xml version="1.0"?>
<MapInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Map Map_Name="New Mills" Site="New Mills" BuldingName="Mill" FloorNumber="0" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills0.png" />
<Map Map_Name="New Mills" Site="New Mills" BuldingName="Mill" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills1.png" />
<Map Map_Name="New Mills" Site="New Mills" BuldingName="Mill" FloorNumber="2" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills2.png" />
<Map Map_Name="New Mills" Site="New Mills" BuldingName="Round Tower" FloorNumber="0" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills0.png" />
<Map Map_Name="New Mills" Site="New Mills" BuldingName="Round Tower" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills1.png" />
<Map Map_Name="New Mills" Site="New Mills" BuldingName="Round Tower" FloorNumber="2" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills2.png" />
<Map Map_Name="Charfield" Site="Charfield" BuldingName="GES" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\Charfield1.png" />
<Map Map_Name="Miskin" Site="Miskin" BuldingName="Miskin Building 1" FloorNumber="0" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills2.png" />
<Map Map_Name="Miskin" Site="Miskin" BuldingName="Miskin Building 2" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\Charfield1.png" />
</MapInformation>
答案 0 :(得分:0)
如果要避免重复条目,则应创建一个空对象并使用它来跟踪重复项。在创建option
元素之前,如果它没有创建元素并将其值作为属性添加到对象,请检查对象上是否存在其值的属性。
这比创建元素然后循环并删除它们要有效得多。
更改:强>
success: function (xml) { //If data is available(success) then..
$(xml).find('Map').each(function () { //go to parent node in xml
siteName = $(this).attr("Site"); //add all site names to siteName var
$("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist
});
}
要强>
success: function (xml) { //If data is available(success) then..
var map = {};
$(xml).find('Map').each(function () { //go to parent node in xml
siteName = $(this).attr("Site"); //add all site names to siteName var
if (!map.hasOwnProperty(siteName)) { // Check if siteName already exists
map.siteName = true; // Set the siteName property on map to avoid duplicates
$("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist
}
});
}
答案 1 :(得分:0)
好的,所以我对乔治的代码略有改动,这些代码大有帮助。以下是我在不使用属性进行检查的情况下完成此工作所做的工作。
success: function (xml) { //If data is available(success) then..
var map = [];
$(xml).find('Map').each(function () { //go to parent node in xml
siteName = $(this).attr("Site"); //add all site names to siteName var
if ($.inArray(siteName, map) == -1) {
map.push(siteName);
$("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist
}