2015-03-18 3 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

+0

@LShet ty: спасибо, но селектор работает. – user1350963

ответ

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

Смежные вопросы