Заполнение <select>значениями из списка строк - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть список строк для использования с AccuWeather API, который называется WeatherLocationDatabase.txt и выглядит примерно так:

CityName="Aachen, DE" Location="EUR|DE|GM011|AACHEN" Country="Germany"
CityName="Aalborg, DK" Location="EUR|DK|DA007|AALBORG" Country="Denmark"
CityName="Aalesund, NO" Location="EUR|NO|NO007|AALESUND" Country="Norway"
CityName="Aare, SE" Location="EUR|SE|SW006|AARE" Country="Sweden"
CityName="Aarhus, DK" Location="EUR|DK|DA001|AARHUS" Country="Denmark"
CityName="Aba, NG" Location="AFR|NG|NI008|ABA" Country="Nigeria"
CityName="Abadan, IR" Location="MEA|IR|IR016|ABADAN" Country="Iran"
CityName="Abakan, RU" Location="ASI|RU|RS033|ABAKAN" Country="Russia"
CityName="Abbotsford, CA" Location="NAM|CA|BC|ABBOTSFORD" Country="Canada"
CityName="Abeokuta, NG" Location="AFR|NG|NI000|ABEOKUTA" Country="Nigeria"
CityName="Aberdeen, UK" Location="EUR|UK|UK002|ABERDEEN" Country="United Kingdom"
CityName="Abidjan, CI" Location="AFR|CI|IV002|ABIDJAN" Country="Ivory Coast"
...

Есть ли способ использовать AJAX для заполнения <select>, который должен выглядеть так, используя jQuery?

<select>
    <option value="CityName">CityName</option>
    <option value="CityName">CityName</option>
    <option value="CityName">CityName</option>
    <option value="CityName">CityName</option>
    ...
</select>

1 Ответ

3 голосов
/ 23 декабря 2011

С этим текстовым файлом вы можете использовать jQuery и сделать:

$.get('WeatherLocationDatabase.txt', function(text){
  var markup = "",
      i, item,
      data = text.split(/CityName="(.+)"\sLocation="(.*)"\sCountry="(.*)"\s?/mg).filter(function(e){return e});
  for( i = 0; item = data[i]; i+=3){
    // no need to specify value if equals to inner text.
    markup += "<option>" + item + "</option>";
    // you could break if data[i+1] or data[i+2] changes
  }
  $("#someSelectID").append(markup);
});

Объяснено var data: я разделил RegEx, чтобы соответствовать значениям CityName, Location и Country, а затем удаляю созданные индексы пустых строкпо разделению RegEx с фильтром взломать.В этот момент данные должны выглядеть следующим образом:

["Aachen, DE", "EUR|DE|GM011|AACHEN", "Germany", "Aalborg, DK", "EUR|DK|DA007|AALBORG", "Denmark", "Aalesund, NO", "EUR|NO|NO007|AALESUND", "Norway", "Aare, SE", "EUR|SE|SW006|AARE", "Sweden", "Aarhus, DK", "EUR|DK|DA001|AARHUS", "Denmark", "Aba, NG", "AFR|NG|NI008|ABA", "Nigeria", "Abadan, IR", "MEA|IR|IR016|ABADAN", "Iran", "Abakan, RU", "ASI|RU|RS033|ABAKAN", "Russia", "Abbotsford, CA", "NAM|CA|BC|ABBOTSFORD", "Canada", "Abeokuta, NG", "AFR|NG|NI000|ABEOKUTA", "Nigeria", "Aberdeen, UK", "EUR|UK|UK002|ABERDEEN", "United Kingdom", "Abidjan, CI", "AFR|CI|IV002|ABIDJAN", "Ivory Coast"]

Что в основном: [CityName1, Location1, Country1, CityName2, Location2, Country2, ..., CityNameN, LocationN, CountryN], где N - номер строки.

Затем я повторяю каждые 3 элемента (потому что есть 3 свойства)

Надеюсь, это поможет.

...