2013-12-13 82 views
0

我的以下代碼對所有select標記項的字母排序都正常工作。。每個循環都不能與.sort一起在html中工作

$("select").html($("option").sort(function (a, b) { 
    return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1 
})) 

但我想分開應用此排序每select項目。爲此,我使用「.each」循環,但它不與.sort一起工作。我正在使用。每個如下:

$("select").html($("option").each(.sort(function (a, b) { 
    return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1 
}))) 

請回答。

+0

你能解釋一下你想在這裏迭代嗎?你想排序的選項元素和迭代每個? – CodingIntrigue

+0

@Rraham我想排序每個「選擇標籤」項albhabetically –

回答

0

你的.sort並不束縛於任何事物,它只是坐在自己的身上。

+0

你可以告訴我它將如何工作? –

0

語法關閉,each方法接受一個函數對所選元素集中的每個元素執行操作。嘗試圍繞着一個帶功能分類代碼,並提供給each

$("select").each(function(){ 
    $(this).html($(this).children("option").sort(function (a, b) { 
     return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1 
    }));  
}); 

JS小提琴:http://jsfiddle.net/MwDQz/

+2

這是不是隻是迭代每個選項並「排序」它,使所有選項的順序與原來的一樣? – CodingIntrigue

+0

@Rraham是的,我錯過了。對不起剛醒來 –

+1

@Rraham糾正,謝謝你看過。 –

1

使用

$("select").each(function() { 
    var $this = $(this); 
    $this.html($("option", $this).sort(function (a, b) { 
     return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1 
    })) 
}); 

你例子不工作,因爲你在每個選項之間循環而不是每個選擇,並排序不鏈接到任何東西。

+0

這個答案有與我的初步答案指出相同的問題。$(「。選項」)選擇器將在頁面上拉動每個選項,而不是將其設置爲當前選擇的範圍。 –

+0

You right,@KevinBowersox,fixed error。 – berrunder

1

你想要在你的select元素上調用.each,然後讓每個select的子元素option排序並將它們再次分配給select元素。

$("select").each(function(idx, el) { 
    $(el).html($(el).children("option").sort(your_sort)); 
}); 
+0

這是最好的答案。 –

+0

@Tomalak:好的,我認爲jQuery足夠聰明,可以將增強對象傳遞到函數中。 – knittl

+1

現在,您可以放棄'idx,el'參數並立即使用'this',就像它本意的那樣。 :) – Tomalak

1

不要更改<select>元素的HTML。只需重新安排現有的<option>元素。

function byTextCaseInsensitive(a, b) { 
    var ta = a.text.toUpperCase(), 
     tb = b.text.toUpperCase(); 
    return ta === tb ? 0 : ta < tb ? -1 : 1; 
} 

$("select").each(function() { 
    $(this).find("option").sort(byTextCaseInsensitive).appendTo(this); 
}); 

提示:追加一個HTML DOM從其先前位置移動它內部的現有節點。

相關問題