2014-10-09 98 views
1

,所以我試圖扭轉與下面的代碼多個值的選擇元素的順序:反向選擇列表順序

<select multiple="multiple"> 
    <option>1</option> 
    <option>2</option> 
    <option>3</option> 
    <option>4</option> 
    <option>5</option> 
    <option>6</option> 
    <option>7</option> 
    <option>8</option> 
    <option>9</option> 
    <option>10</option> 
</select> 

腳本:

var a = []; 
    $('option').each(function() { 
    a.push($(this).val()); 
    }); 

    a.reverse(); 

    for (i = 0; i < a.length; i++) { 
    $('option').index[i].text(a[i]); 
    } 

,顯然我不能t獲取我的選項元素的索引,將其值設置爲相反的順序。

+0

[獲得()](http://api.jquery.com/get/) – melancia 2014-10-09 13:40:25

+0

的'index'屬性是一個函數不是數組。您正在尋找'.eq(i)'。 – 2014-10-09 13:40:49

+0

@FelixKling就是這樣,我不知道這種方法。謝謝你的答案。 – krafterwerk 2014-10-09 13:42:45

回答

2

你可以做一個稍微不同的方式太」再感興趣:

// Grab the options 
var $select = $('select'); 
var options = $select.find('option'); 

// turn the nodelist into an array and reverse it 
options = [].slice.call(options).reverse(); 

// empty the select 
$select.empty(); 

// add each option back 
$.each(options, function (i, el) { 
    $select.append($(el)); 
}); 

DEMO

1

如果使用.eq(1)通過在註釋中@FelixKing的建議,應該這樣做:

$('option:eq(' + i + ')').text(a[i]); 
1

這是更好地重新排序option標籤本身,我認爲,不只是重新排序text例如:如果一個元素被默認選中,或有一些data屬性,你會搞砸了它,因此以下解決方案將工作最好的:

$('.reversed option').each(function() { 
     $(this).prependTo($(this).parent()); 
}); 

這種方式,我們通過選項進行迭代和他們每個人,預先準備的select標籤,最後我們讓他們在逆序

更多最佳(對於性能)方式:

var select = $('.reversed'); 

select.find('option').each(function(){ 
    $(this).prependTo(select); 
}); 

http://jsfiddle.net/6pk4z72o/