IE6-IE9兼容性問題列表及解決辦法_補充之六:鎖表頭的JQuery方案和非JQuery方案。(不支持IE6,7,8)


鑒於從IE8開始,IE不再支持css的expression了,所以以前依靠它完成鎖表頭的代碼就全部失效了,面對新的瀏覽器,一切又要重新來過了。


現在筆者所能找到的對於鎖表頭的方案主要有兩種路子:一種是使用JQuery,另一種是使用純js的,因各個公司情況不一樣,各取所需吧!

 

而這兩條路中每一條又帶有多種實現思路,先僅舉兩個思路如下:

1.另外拷貝一份table的head,然后將它安置在table的最上面,這樣改動量較大。
2.不拷貝head, 想法把table的head固定在最上面,這樣改動量小些。


下面介紹的兩個方案:JQuery方案和非JQuery方案(純js),都是基於思路2的,即不拷貝head, 直接把table的head固定在最上面。


 

1.JQuery方案


1.1 頁面引入
jquery.js

<script src="jquery-1.7.1.js" type="text/javascript"></script>


1.2  添加兩個js函數

添加LockTableHead()translate()函數。

注意:為防止JQuery與現有js框架搶奪$標識符,要執行jQuery.noConflict(),


function LockTableHead(divId, tableId) {

    var jq = jQuery.noConflict();

    jq("#" + divId).scroll(function () {

        var delta = jq("#" + divId).scrollTop();

        if (delta > 0) {

            translate(jq("#" + tableId +" th"), 0, delta - 2);

        }

        else {

            translate(jq("#" + tableId + " th"), 0, 0);

        }

    });

}

function translate(element, x, y) {

    var translation = "translate(" + x + "px," + y + "px)"

    element.css({

        "transform": translation,

        "-ms-transform": translation,

        "-webkit-transform": translation,

        "-o-transform": translation,

        "-moz-transform": translation

    });

}

1.3 修改頁面,調用js

適當的地方添加LockTableHead()函數調用即可。

如下:

<button  onclick="LockTableHead('grid','T000000');" name="b1" type="button">button</button>

注意:要提供一個dividtableid


2.非JQuery方案(純js)

2.1 思路

受JQuery方案的啟發,將它翻譯回普通js即可。

2.2 添加js函數

添加LockTableHead()函數。

function LockTableHead(divId, tableId) {

    document.getElementById(divId).onscroll = function () {

    var delta = document.getElementById(divId).scrollTop;

    var t1 = "translate(0px," + delta + "px)";

    th_Array = document.getElementById(tableId).getElementsByTagName("th");

    for (i = 0; i < th_Array.length; i++) {

       th_Array[i].style["-ms-transform"] = t1;

    }

  };

}

 

2.3 修改頁面,調用js

同上,在適當的地方添加LockTableHead()函數調用即可。

如下:

<button onclick="LockTableHead('grid','T000000');" name="b1" type="button">button</button>

注意:要提供一個dividtableid

 

3.總結

以上兩方案實際上都是使用了css3中的translate函數,這就意味着瀏覽器得支持這個功能是前提條件。

另外,如果頁面上只有一個table,也可以通過getElementsByTagName的方式定位table,並用parentNode的方式定位div,這樣就不必傳遞它們的id了。

 

推薦參考資料:
http://www.mycafei.com/a/study/2012/0909/2.html

 

關於IE, 下面的方案不支持IE6, IE7, IE8, 只支持IE9, IE10。
因為從IE9開始才支持css3的部分功能,所以,IE6, IE7, IE8就不能用此方案了, 其實IE6, IE7 還用css的expressions不挺好嗎?多省事,就一句話的事。
 

4.附錄完整的代碼

    <HTML>
      <HEAD>
        <TITLE >fff</TITLE>
        <META http-equiv="X-UA-Compatible" content="IE=9" />
            <script type="text/javascript">
                function LockTableHead(divId, tableId) {
                    document.getElementById(divId).onscroll = function () {
                        var delta = document.getElementById(divId).scrollTop;
                        var t1 = "translate(0px," + delta + "px)";
                        th_Array = document.getElementById(tableId).getElementsByTagName("th");
                        for (i = 0; i < th_Array.length; i++) {
                            th_Array[i].style["-ms-transform"] = t1;
                        }
                    };
                }
    </script>
    </HEAD>
    <body onload="LockTableHead('body','your_table')">
    <form>
    <div id="body" style="border-right: 1px groove; border-top: 1px groove; left: 60px;
        overflow: auto; border-left: 1px groove; width: 374px; border-bottom: 1px groove;
        position: absolute; top: 159px; height: 308px">
        <div style="overflow: visible; width: 370px; position: static; height: 308px">
            <table id="your_table">
                <thead id="hid" style="background-color: white">
                    <tr id="tid">
                        <th style="width: 100px">
                            col1
                        </th>
                        <th style="width: 100px">
                            col2
                        </th>
                        <th style="width: 100px">
                            col3
                        </th>
                        <th  style="width: 100px">
                            col4
                        </th>
                        <th  style="width: 100px">
                            col5
                        </th>
                        <th  style="width: 100px">
                            col6
                        </th>
                        <th  style="width: 100px">
                            col7
                        </th>
                        <th style="width: 100px">
                            col8
                        </th>
                        <th  style="width: 100px">
                            col9
                        </th>
                        <th  style="width: 100px">
                            col10
                        </th>
                        <th  style="width: 100px">
                            col11
                        </th>
                        <th  style="width: 100px">
                            col12
                        </th>
                    </tr>
                </thead>
                <tbody style="display: block; overflow: auto">
                    <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
 <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>
                     <tr>
                        <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                         <td>
                            milk
                        </td>
                        <td>
                            1 quart
                        </td>
                        <td>
                            2 quart
                        </td>
                    </tr>

                </tbody>
            </table>
        </div>
    </div>
    </form>
</body>
</html>

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM