2011-11-28 30 views
2

如何(在排序選擇框我使用這個)做關於參數這項工作:的jQuery的.html()說法

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

如果$(this)代表「選擇」菜單,參數是一個集排序的「選項」值。或者有更好的/更清晰的方式來解釋發生了什麼?

+0

你究竟想知道什麼? –

回答

1

你問一個解釋,這裏有一個簡單的英語解釋:

對於這個<select>元素,以現有<option>,把它們 到一個數組中,並通過他們的文本值排序,然後更換 現有的HTML與新的排序選項。

等效jQuery的爲您的代碼,變量名,以幫助你看到發生了什麼:

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

發生是一個JavaScript方法排序,在這裏讀到它:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

1

將元素傳遞給html()方法時,元素將從其以前的位置移除,並在此情況下添加到選擇器$(this)

所以,

$(this).html($("option", $(this))  //is equal to: 
$(this).html($(this).find("option")); //is similar to (in terms of elements): 
$(this).find(":not(option)").remove(); // or 

var temp = $("div").append($("option", this)); //Create temp container 
$(this).html("");        //Remove contents 
$(this).append(temp.children());    //Append <option> 

意思是: 「與當前節點<option>元件覆蓋當前元素」。

0

這是隻是一個說明來幫助你進行調試,以前對這個問題的回答解釋了你所問的問題的確切答案,但我只是想讓你知道我上週遇到的這個問題可能會有幫助。我希望我能記住那些也有其他人也發現這個問題的博客文章。

當你試圖按照你把它們放在一起的方式鏈接條件語句時,jQuery中存在一個問題。所以:

return a.text == b.text ? 0 : a.text < b.text ? -1 : 1 

可能不會給你你期待的結果。試試這個:

var isLessThan = a.text < b.text ? -1 : 1; 
return a.text == b.text ? 0 : isLessThan; 

我知道這有點痛苦,但它至少會給你你期望從那行代碼中得到的答案。

+0

這怎麼可能是一個jQuery的問題?這將是一個JavaScript問題,不是嗎?如果是這樣,爲什麼三元不符合規格? –