我正在尝试使用客户端类型的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时。
答案 0 :(得分:2)
sort方法对Array对象进行排序;没有新的Array对象 在执行期间创建。如果您提供的功能 sortFunction参数,它必须返回以下值之一:
- 如果传递的第一个参数小于第二个参数,则为负值。
- 如果两个参数相同则为零。
- 如果第一个参数大于第二个参数,则为正值。
取自http://msdn.microsoft.com/en-us/library/ie/4b4fbfhk(v=vs.94).aspx
['b', 'a'].sort(function (a, b) { return a > b? 1 : (b > a? -1 : 0) }); //a, b