我编写此函数是为了使列可排序。我想重新排列基于特定订单号的div。它在chrome和火狐中运行得很好,但由于某种原因,在IE8中,在函数的末尾,没有将所有重新排列的内容附加到#current_orders_content2 div中,所有的内容都会消失。该函数在JSlint中(通过jsfiddle)进行了检验,奇怪的是,查看末尾的所有值(通过IE控制台),一切看起来都是正确的-值是我所期望的。只是看起来append()失败了。所以我用.html(),appendTo测试了一下,还是没有找到joy。如果我向它传递一个html字符串,它就会工作,但是这些jquery对象会失败。
有没有关于为什么或者如何让它工作的想法?
谢谢!
$('.sortable').click(function () {
"use strict";
if ($(this).hasClass('sortable_numeric')) {
/*
*function sets ascending/descending classes
*for formatting, placement of arrow_up.png, arrow_down.png
*returns the sort order to be used below "asc" or "desc"
*/
var sort_order = sort_class_distribution($(this));
var current_val = "";
var order_number = "";
/*
*determine what column is being sorted
*remove the "_header" text from the id to
*get this information
*/
var sort_column = this.id;
sort_column = sort_column.replace("header_", "");
/*
*append "_div" to the end of the string to get
*the class of the divs we are sorting by
*/
sort_column += "_div";
var valuesArr = [];
$('.' + sort_column).each(function () {
var current_val = $.trim($(this).text());
current_val = parseInt(current_val, 10);
valuesArr.push(current_val);
});
var sorted = [];
if (sort_order == "asc") {
sorted = valuesArr.slice(0).sort(sortA);
} else if (sort_order == "desc") {
sorted = valuesArr.slice(0).sort(sortD);
}
/*
* for each item in this array, get the parent div
* with the class order_and_lines_container_div.
*
* push it into an array of its own to to put back
* onto the page in the order of the sorted array
*/
var containerArr = [];
var current_container = "";
var c = 0;
for ( c = 0; c <= sorted.length; c++ ) {
current_container = $('#order_container_' + sorted[c]);
containerArr.push(current_container);
}
$('#currentOrdersContent2').html('');
for ( c = 0; c <= sorted.length; c++ ) {
$('#currentOrdersContent2').append(containerArr[c]);
}
}
});发布于 2012-06-22 05:22:44
我不知道这是不是问题所在,但是你的循环已经越界了。
这..。
for ( c = 0; c <= sorted.length; c++ ) {应该是这样的。
// -----------v---constrain to indices less than sorted.length
for ( c = 0; c < sorted.length; c++ ) {此外,您使用的代码似乎比这种排序所需的代码多得多。
这是你的代码修改了一下...
$('.sortable').click(function () {
"use strict";
if ($(this).hasClass('sortable_numeric')) {
var sort_order = sort_class_distribution($(this)),
sort_column = this.id.replace("header_", "") + "_div",
content2 = $('#currentOrdersContent2');
var sorted = $('.' + sort_column).map(function () {
return parseInt($(this).text(), 10);
})
.toArray()
.sort(sort_order == "asc" ? sortA : sortD);
$.each(sorted, function(i, item) {
content2.append($('#order_container_' + item));
});
}
});一些变化是..。
.map()。这只是简单地迭代元素,并将您提供的任何数组值放入一个新的jQuery对象中,因此您最终得到了一个充满数字的jQuery对象。由于$.trim(),以便立即将新的数组对象转换为实际的Array.return,但经过了修改。.map().toArray().sort()只是方法链接。如上所述,.map()返回新的jQuery对象。在该对象上调用.toArray(),并返回一个数组。在该数组上调用.sort(),并返回分配给该变量的相同数组。
这部分sort_order == "asc" ? sortA : sortD是一个条件运算符,类似于if...else的简写形式。基本上,如果条件为真,则返回sortA,否则返回sortD。
https://stackoverflow.com/questions/11146889
复制相似问题