我正在尝试做一个客户端类型的 jQuery UI 手风琴,按标题文本按字母顺序放置手风琴部分。
jQuery UI 结构由一个用于类别标题的 h3 和一个用于该类别内容的 div 组成。因此,我需要对 h3 文本进行排序,但要在 DOM 中串联移动每个 h3 及其以下 div。
我有以下可在 FF 和 Chrome 中使用的功能,但不适用于任何 IE 风格:
function sort_accordion_headers() {
var tempArray = [];
//Push h3-div pairs into array
$('.accordion h3').each(function(i,ui) {
tempArray.push(new accordion_sort_object(ui,$(ui).next('div')));
});
//Sort the array on header text
tempArray.sort(function(a,b) {
var keyA = $(a.header).text();
var keyB = $(b.header).text();
return (keyA > keyB) ? 1 : 0;
});
//Clear accordion contents and replace with re-sorted content
for (var i in tempArray) {
$('.accordion').append(tempArray[i].header).append(tempArray[i].div);
}
}
//Creates custom object for sorting accordion headers
function accordion_sort_object($htag,$div) {
this.header = $htag;
this.div = $div;
}
知道为什么这在 IE 中不起作用吗?感觉它必须与 append() 或 sort() 函数有关,但我不确定是什么。
编辑:澄清一下,它不会在 IE 中引发错误;它只是不执行排序。手风琴部分保持原来的顺序。
编辑:问题解决了!感谢 Plalx 指出当 KeyA 小于 KeyB 时我返回 0,而我应该返回 -1。