Jquery排序表行在IE中不起作用,但在所有其他浏览器中都起作用
我试图在单击列标题时对表行Asc和Desc进行排序。它在firefox和Chrome中运行良好,但在IE中不起作用。我尝试过不同的方法,比如获取最新版本的jquery,但仍然遇到同样的问题。 有些列按字母顺序排序,有些按数值排序,有些按空值排序,最后是按checkstate排序。我是按班级分类的 我不能使用插件。这就是我所拥有的。为什么除了IE之外,其他浏览器都可以使用?我看了又看,在任何地方都找不到这样的例子,有人以同样的方式排序。 任何信息都会有帮助。谢谢 这是jquery-Jquery排序表行在IE中不起作用,但在所有其他浏览器中都起作用,jquery,asp.net,internet-explorer-8,Jquery,Asp.net,Internet Explorer 8,我试图在单击列标题时对表行Asc和Desc进行排序。它在firefox和Chrome中运行良好,但在IE中不起作用。我尝试过不同的方法,比如获取最新版本的jquery,但仍然遇到同样的问题。 有些列按字母顺序排序,有些按数值排序,有些按空值排序,最后是按checkstate排序。我是按班级分类的 我不能使用插件。这就是我所拥有的。为什么除了IE之外,其他浏览器都可以使用?我看了又看,在任何地方都找不到这样的例子,有人以同样的方式排序。 任何信息都会有帮助。谢谢 这是jquery- <scr
<script type="text/javascript">
$(document).ready(function () {
$('.s').click(function () { //this is my header click
var NotOptional;
var checkState;
if ($(this).hasClass('o')) { //optional column
NotOptional = false;
} else {
NotOptional = true;
}
if ($(this).hasClass('cs')) { //class on my input items
checkState = true;
} else {
checkState = false;
}
var o = $(this).hasClass('asc') ? 'desc' : 'asc';
$('.s').removeClass('asc').removeClass('desc');
$(this).addClass(o);
var colIndex = $(this).prevAll().length; //getting the rows
var tbod = $(this).closest("table").find("tbody")
var rows = tbod.find("tr").not('.first');
rows.sort(function (a, b) {
if (checkState == true) { //if its a check box or radio
var A = $(a).find("td input").eq(colIndex); //getting checkstate
var B = $(b).find("td input").eq(colIndex);
if (A.is(':checked') == true) {
A = 1; //setting row value to compare
} else {
A = 0;
}
if (B.is(':checked') == true) {
B = 1;
} else {
B = 0;
}
if (A < B) { //returning compare for input
return A < B;
} else if (A == B) {
return A == B;
} else if (A > B) {
return A > B;
}
} else {
if (NotOptional == false) { //not optional never blank
var A = $(a).find("td").eq(colIndex).text().toUpperCase();
var B = $(b).find("td").eq(colIndex).text().toUpperCase();
} else {
//these don't have to have a value but might contain numeric, letter or a null value
var A = $(a).find("td").eq(colIndex).text().toUpperCase();
var B = $(b).find("td").eq(colIndex).text().toUpperCase();
if (!isNaN(A)) A = Number(A);
if (!isNaN(B)) B = Number(B);
}
}
return o == 'asc' ? A > B : A < B;
});
$.each(rows, function (index, ele) {
tbod.append(ele); //appending the rows
});
}); //end sortable click
$(文档).ready(函数(){
$('.s')。单击(函数(){//这是我的标题单击
无选择性;
var校验状态;
if($(this).hasClass('o')){//可选列
非选择性=假;
}否则{
非选择性=正确;
}
如果($(this).hasClass('cs')){//class在我的输入项上
checkState=true;
}否则{
checkState=false;
}
var o=$(this).hasClass('asc')?'desc':'asc';
$('.s').removeClass('asc').removeClass('desc');
$(此).addClass(o);
var colIndex=$(this).prevAll().length;//获取行
var tbod=$(this).closest(“表”).find(“tbody”)
var rows=tbod.find(“tr”).not(“.first”);
行排序(函数(a,b){
if(checkState==true){//如果是复选框或单选框
var A=$(A).find(“td输入”).eq(colIndex);//获取checkstate
VarB=$(B).find(“td输入”).eq(colIndex);
如果(A.is(':checked')==true){
A=1;//设置要比较的行值
}否则{
A=0;
}
如果(B.is(':checked')==true){
B=1;
}否则{
B=0;
}
如果(AB){
返回A>B;
}
}否则{
如果(NotOptional==false){//not optional从不为空
var A=$(A).find(“td”).eq(colIndex).text().toUpperCase();
var B=$(B).find(“td”).eq(colIndex).text().toUpperCase();
}否则{
//它们不必有值,但可能包含数字、字母或空值
var A=$(A).find(“td”).eq(colIndex).text().toUpperCase();
var B=$(B).find(“td”).eq(colIndex).text().toUpperCase();
如果(!isNaN(A))A=数字(A);
如果(!isNaN(B))B=编号(B);
}
}
返回o='asc'?A>B:A
我被困在这一点上,无法理解为什么IE不理解行排序。如果有帮助,这个jquery是在aspx页面上的用户控件上。我已经在IE中使用开发工具检查了标记,并且类在那里,它通过jquery单击运行,但是当它比较行时,它会变得非常混乱,只是随机附加它们(ie-不排序)好的。我崩溃了,决定使用Tablesorter。感谢所有人的帮助。我建议任何想要对表进行排序并需要跨浏览器支持的人,使用Tablesorter,只需编写自己的解析器
不确定这是否会产生任何影响,但您在此行末尾缺少一个分号:var tbod=$(this).closest(“table”).find(“tbody”)谢谢,我没有看到。没有修复它,但是谢谢你指出。IE上的类名有什么限制吗?我忍不住想,IE可能会设置一个字符限制,或者它能理解的最大类数?有些行会在IE中移动,但有些行根本不移动。你在控制台中有没有发现任何错误?也许是在做h在修改变量之前和之后大量使用console.log函数将为IE实际认为其处理的内容提供一些启发,这可能会有所帮助?移动行和不移动行之间有什么相似之处?