0

请你帮我按字母顺序填充我的选择列表。

这是我到目前为止的代码: -

$.getJSON("php/countryBorders.geo.json", (data) => {
  $select.html("");
  

  for (let i = 0; i < data["features"].length; i++) {
    
    $select.append(
      '<option value="' +
        data["features"][i]['properties']["iso_a2"] +
        '">' +
        data["features"][i]["properties"]["name"]
       
    );  
   
  }
});
4

3 回答 3

0

首先将每个标签的文本和值提取option到一个对象数组中。并对数组进行排序。然后option按顺序用数组内容更新元素

var opts = $('select');
var arr = opts.map(function(_, o) { return { t: $(o).text(), v: o.value }; }).get();
arr.sort(function(o1, o2) { return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; });
opts.each(function(i, o) {
  o.value = arr[i].v;
  $(o).text(arr[i].t);
});
于 2020-10-19T13:07:27.423 回答
0

您可以使用以下逻辑进行排序,您只需要在比较时使用name值而不是ab(来自要排序的数组)。

var data  = ["ball","cat","elephant","dog","apple"];
console.log(data);
data.sort(function(a, b) {
    a = a.toLowerCase();
    b = b.toLowerCase();
    if(a > b) return 1;
    if(a < b) return -1;
    return 0;
});
console.log(data);

于 2020-10-19T13:13:08.843 回答
0
$.getJSON("php/countryBorders.geo.json", (data) => {
  $select.html("");
  
  const features = data["features"].sort((a,b) => {
    return (
      (a.properties.name < b.properties.name && -1) ||
      (a.properties.name > b.properties.name && 1) ||
      0
    ); 
  });
  
  features.forEach(feature => {
    $select.append(`<option value="${feature.properties.iso_a2}">${feature.properties.name}</option>`);
  });
});
于 2020-10-19T13:15:56.080 回答