2012-06-14 53 views
2

我有幾個選擇哪一個相互依賴,如果我選擇一個值在另一個被刪除,並且以前的值被添加到其他人,我如何可以添加以前的值由JQuery選擇?然後按字母順序排序?將值添加到一個選擇和排序

回答

2

不能確定排序(不要太很難搞清楚),但是你可以在<option>元素追加到像這樣的列表:

$("#myselect").append(
    $("<option>").prop("selected", "selected").attr("value", "OptionValue").text("OptionText") 
); 

prop()的第一個電話是唯一的,如果您需要該元素將成爲列表中的選定元素,否則您可以省略它。

編輯:我說幹就幹,制定了分類部分:

var elems = []; 
$("#sortable > option").each(function() { 
    elems.push({ key: $(this).val(), value: $(this).text() }); 
}); 

elems.sort(function (a, b) { 
    if (a.value < b.value) return -1; 
    if (a.value > b.value) return 1; 
    return 0; 
}); 

$("#sortable").empty(); 
$.each(elems, function (idx, item) { 
    $("#sortable").append(
     $("<option>").attr("value", item.key).text(item.value) 
    ); 
}); 
+0

'selected'排序值應'丙代碼()''未ATTR()'。對 ?順便說一句+1代碼不錯 – Jashwant

+0

它應該?似乎與'attr'一起工作正常。有什麼關於該屬性的東西可以用'prop'處理得更好? – kprobst

+0

這是一個問題暨建議。我不確定,所以我加了'對嗎?'。 [prop](http://api.jquery.com/prop/)應該在處理'properties'時替換'attr()' – Jashwant

1

我想你不能真正「秩序」的DOM元素。

對此,最好的方法是可以讀出應該將元素添加到數組中的所有元素,將新值添加到數組中,然後對其進行排序。在這個過程中DOM元素應該被刪除。之後,您將按照所需順序再次將新訂購的元素添加到DOM。

2

由於用於將值代碼是可用的,在這裏是在選取

function sortOptions() 
{ 
    var arr = []; 
    $("#myselect option").each(function(){ 
     arr.push($(this).html()); 
    }); 
    $('#myselect').empty(); 
    arr.sort(); 
    var html=''; 
    for(var i=0;i<arr.length;i++) 
    { 
     html+='<option>' + arr[i] + '</option>' 
    } 
    $('#myselect').html(html); 
} 
+0

好的,感謝您的示例代碼,一個問題,JQuery有可排序交互的選項,也許我可以使用? – TlonXP

+0

如果你正在討論[jQuery UI Sortable插件](http://jqueryui.com/demos/sortable/),我不認爲它會解決你上面提到的問題。 「jQuery UI Sortable插件通過拖動鼠標來使選定元素可排序。」因爲發佈在他們的頁面 –

+0

感謝您的澄清 – TlonXP