自动完成(外部xml数据)将属性拆分为单独的字段

时间:2016-08-24 13:25:06

标签: javascript jquery xml autocomplete jquery-ui-autocomplete

我正在研究自动完成XML数据解析问题。

当用户使用&#34;标签&#34;进行搜索时,我试图让每个<states>元素的属性被分割。作为搜索查询。

例如:&#34;杜布罗夫尼克&#34;搜索,并选择一个选项。 挑选后,他们所做选择中的属性将被拆分,然后用于填写表单。

的Javascript 注意:tjq = jQuery.noConflict();

tjq(function() {

    var myArr = [];

    tjq.ajax({
        type: "GET",
        url: "http://www.thetravelosophy.co.uk/images/www.thetravelosophy.co.uk/1/js/Destinations1.xml",
        dataType: "xml",
        success: parseXml,
        complete: setupAC,
        failure: function(data) {
        alert("XML File could not be found");
       }
     });

    function parseXml(xml)
     {
       //find every query value
       tjq(xml).find("state").each(function()
       {
         myArr.push(tjq(this).value("label","country","resort","destair"));
       });
     };

function setupAC() 
{tjq( "#country1" ).autocomplete({
  source: myArr,
  minLength: 3,

 select: function( event, ui ) {
        event.preventDefault();
        tjq('#country1').val(ui.item.label);
        this.value = ui.item.label;
            tjq('#country').val(ui.item.country);
            tjq("#country").change();
            tjq('#resort').val(ui.item.resort);
            tjq('#destair').val(ui.item.destair);       
            tjq("#destair").change();
    }
 });}

XML数据如下:

<states>
<state label="Dubrovnik Region, Croatia" country="Croatia" resort="" destair="DBV"/>
<state label="Dubrovnik Region, Croatia" country="Croatia" resort="" destair="DBV"/>
<state label="Split Region, Croatia" country="Croatia" resort="" destair="SPU"/>
<state label="Split, Croatia" country="Croatia" resort="1723" destair="SPU"/>
</states>

JSfiddle:https://jsfiddle.net/ftro7bqd/

1 个答案:

答案 0 :(得分:0)

这是因为:

    myArr.push(tjq(this).value("label","country","resort","destair"));

无法从xml数据中读取值。并且myArr是空的。

这可能有效而不是:

     label = $(this).find("label").attr('value');
     country = $(this).find("country").attr('value');
     resort = $(this).find("resort").attr('value');
     destair = $(this).find("destair").attr('value'); 
     myArr.push({'label':label,'country':country,'resort':resort,'destair':destair});

现在myArr被填充并自动完成过滤掉它的结果。