2013-04-11 52 views
0

我想排序表格行Asc和Desc时点击列标题。它在Firefox和Chrome中工作正常,但不能在IE中工作。我尝试过不同的方式,比如获取最新版本的jquery,我仍然遇到同样的问题。 有些列以alphebetically排序,有些按数字排序,有些会根据空值进行排序,最后在checkstate排序。我基于类进行排序。Jquery排序表行不工作在IE中,但在所有其他浏览器工作

我无法使用插件。这是我的。为什么在除IE以外的所有浏览器中都能正常工作?我已经看了看,并且我无法在任何地方找到像这样的例子,其中有人按照相同的方式排序。 任何信息会有帮助。谢谢!

这里的jquery-

<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 

我被困在这并不能弄清楚为什么IE不明白的行排序。如果有帮助,这个jQuery是在aspx页面上的用户控制。我已经在IE中使用开发工具检查了标记,并且类在那里,它通过Jquery点击运行,但是当它比较行时,它会全部混淆并随机附加它们(即 - 不排序)

+0

不知道这是否会令任何区别,但是你错过了这行的最后一个分号:VAR TBOD = $(本).closest(“表”)找到(“TBODY “) – bUKaneer 2013-04-11 15:48:29

+0

谢谢,我没有看到。没有修复它,但感谢您指出。 – 2013-04-11 15:54:41

+0

IE中是否有类名的约束?我不禁想,也许IE会提供一个字符限制或最大数量的类,它会除外,明白吗?有些行会在IE中移动,但有些行根本不会移动。 – 2013-04-11 15:56:28

回答

相关问题