如何(在排序選擇框我使用這個)做關於參數這項工作:的jQuery的.html()說法
$(this).html($("option", $(this)).sort(function(a, b) {return a.text == b.text ? 0 : a.text < b.text ? -1 : 1}));
如果$(this)
代表「選擇」菜單,參數是一個集排序的「選項」值。或者有更好的/更清晰的方式來解釋發生了什麼?
如何(在排序選擇框我使用這個)做關於參數這項工作:的jQuery的.html()說法
$(this).html($("option", $(this)).sort(function(a, b) {return a.text == b.text ? 0 : a.text < b.text ? -1 : 1}));
如果$(this)
代表「選擇」菜單,參數是一個集排序的「選項」值。或者有更好的/更清晰的方式來解釋發生了什麼?
你問一個解釋,這裏有一個簡單的英語解釋:
對於這個
<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
將元素傳遞給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>
元件覆蓋當前元素」。
這是隻是一個說明來幫助你進行調試,以前對這個問題的回答解釋了你所問的問題的確切答案,但我只是想讓你知道我上週遇到的這個問題可能會有幫助。我希望我能記住那些也有其他人也發現這個問題的博客文章。
當你試圖按照你把它們放在一起的方式鏈接條件語句時,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;
我知道這有點痛苦,但它至少會給你你期望從那行代碼中得到的答案。
這怎麼可能是一個jQuery的問題?這將是一個JavaScript問題,不是嗎?如果是這樣,爲什麼三元不符合規格? –
你究竟想知道什麼? –