2013-06-28 2 views
1

Я пытаюсь сортировать каждый выбор на странице, не сортируя первый вариант. Я попытался изменить несколько значений, но в итоге я сортировал только один из них. Это работает сейчас, но не игнорируя первый вариант для каждого выбора:Игнорировать первый вариант при сортировке каждого выбора на странице

HTML:

<select name="numero_uno" id="numero_uno"> 
        <option>Select</option> 
        <option>Mops</option> 
        <option>Brooms</option> 
        <option>X-wings</option> 
       </select> 

<select name="number_two" id="number_two"> 
       <option>Select</option> 
        <option>Cabbage</option> 
        <option>Alfalfa</option> 
        <option>Beets</option> 
       </select> 

Javascript:

function sortSelect(e){ 
    var oA,i,o;oA=[]; 
    for(i=0;i<e.options.length;i++){ 
     o=e.options[i]; 
     oA[i]=new Option(o.text,o.value,o.defaultSelected,o.selected); 
    } 
    oA.sort(function(a,b){ 
     var la=a.text.toLowerCase(),lb=b.text.toLowerCase(); 
     if(la>lb){ 
      return 1; 
     } 
     if(la<lb){ 
      return-1; 
     } 
     return 0; 
    }); 
    e.options.length=0; 
    for(i=0;i<oA.length;i++){ 
     e.options[i]=oA[i];oA[i]=null; 
    } 
    return true; 
} 
var eA=document.getElementsByTagName('select'); 
for(var i=0;i<eA.length;i++){ 
    sortSelect(eA[i]); 
} 

Я видел некоторые решения, которые используют JQuery, но я хочу сделать это с просто javascript.

jsfiddle: http://jsfiddle.net/cfX8E/

+2

Простой обходной путь, в начале функции сортировки, назначает первый вариант переменной, удаляет ее, сортирует все, снова вставляет первый вариант спереди. – tymeJV

+0

Вы должны действительно использовать более описательные имена переменных, у меня от этого болит голова. –

ответ

1

Не можете ли вы просто изменить петли, чтобы начать со второго варианта?

function sortSelect(e){ 
    var oA,i,o;oA=[]; 
    for(i=1;i<e.options.length;i++){ 
     o=e.options[i]; 
     oA[i-1]=new Option(o.text,o.value,o.defaultSelected,o.selected); 
    } 
    oA.sort(function(a,b){ 
     var la=a.text.toLowerCase(),lb=b.text.toLowerCase(); 
     if(la>lb){ 
      return 1; 
     } 
     if(la<lb){ 
      return-1; 
     } 
     return 0; 
    }); 
    e.options.length=1; 
    for(i=0;i<oA.length;i++){ 
     e.options[i+1]=oA[i];oA[i]=null; 
    } 
    return true; 
} 
var eA=document.getElementsByTagName('select'); 
for(var i=0;i<eA.length;i++){ 
    sortSelect(eA[i]); 
} 
+0

Спасибо, это было решение, которое я искал, но я не знал, какие значения изменить, чтобы заставить его работать. – user2219915

0

Не добавляйте первый вариант. Сначала откорректируйте список выбора, а затем добавьте первый вариант вверху.