2015-03-18 88 views
-1

想要通過它的選項文本對html進行排序。爲什麼這種排序功能不起作用?

$(function() { 
     var options = $('#buybox select[name="group[2]"] option'); 

     var arr = options.map(function(_, o) { 
      return { 
       t: $(o).text(), 
       v: o.value 
      }; 
     }).get(); 

     arr.sort(function(a, b) { 
      //return a.t > b.t ? 1 : a.t < b.t ? -1 : 0;// numeric 
      var sizes = { "XS" : 0 , "S" : 1, "M" : 2, "L" : 3, "XL" : 4, "2XL" : 5}; 
      console.log(sizes); 
      console.log(a.t); 
      console.log(b.t); 
      console.log(sizes[a.t]); 
      console.log(sizes[b.t]); 
      return sizes[a.t] > sizes[b.t] ? 1 : sizes[a.t] < sizes[b.t] ? -1 : 0; 
     }); 

     options.each(function(i, o) { 
      o.value = arr[i].v; 
      $(o).text(arr[i].t); 
     }); 


    }); 

數字排序工作得很好。但屬性名稱a.t和b.t未定義。 這裏有什麼問題?

感謝

HTML選擇

select name="group[2]" onchange="this.form.submit();" style="width: 300px;"> 
<option selected="selected" value="7">L</option> 
<option value="8">XL</option> 
<option value="9">2XL</option> 
<option value="35">M</option> 
</select> 
+1

嘗試'VAR選項= $('#buybox選擇[ name =「group \\ [2 \\]」] option');' – lshettyl 2015-03-18 21:47:23

+0

@LShet ty:謝謝,但選擇器正常工作。 – user1350963 2015-03-18 21:49:29

回答

0

複雜了很多

var sizes = ["XS", "S", "M", "L", "XL", "2XL"], 
    select = $('#buybox select[name="group[2]"]'); 

$('option', select).sort(function (a, b) { 
    return sizes.indexOf($(a).text()) - sizes.indexOf($(b).text()); 
}).appendTo(select); 

FIDDLE

+0

謝謝,這太棒了!而這麼短的;-)但我的解決方案的錯誤是,我不得不修剪選項 - 文本。但是你的更好。 – user1350963 2015-03-18 22:26:54

相關問題