修复了动态列大小和大量列的表标题

时间:2015-12-14 21:28:22

标签: javascript html css html-table

我正在从Javascript动态创建表。该表的结构如下。我需要为这个动态创建的表有固定的标题。

    <table>
    <thead><tr>
    <th></th>
    <th></th>
    <th></th> <!-- the number of columns are based on server response -->
    </tr></thead>
    <tbody>
    <tr><td><td></td></td></tr>
    <tr><td><td></td></td></tr>
    <tr><td><td></td></td></tr> <!-- the number of columns correspond to the headers and it varies dynamically -->
    </tbody>
    </table>

下面是我的javascript代码:我从数据库中获取表内容。我也在动态创建表格;

 require(["jquery","dojox/widget/Standby","dojox/grid/DataGrid","dijit/registry", "dojo/dom-form", "dojo/dom", "dojo/on",  "dojo/request","dojo/parser", "dojo/ready","dojo/domReady!"],
        function($,Standby,DataGrid,registry, domForm, dom, on, request, parser, ready){

    parser.parse();
//  document.getElementById("productDetail").style.display = "none";
    //document.getElementById("productDetail").style.visibility = "hidden";

    var test=registry.byId("basicStandby1");
    var pid=document.getElementById("productNumber").value;

    if((pid != null) || (pid!="")){
        displayGrid(pid);
    }


    function sortByKey(array, key) {
        return array.sort(function(a, b) {
            var x = a[key]; var y = b[key];
            return ((x < y) ? -1 : ((x > y) ? 1 : 0));
        });
    }
    on(dom.byId("resetButton"), "click", function(){

        location.reload(true);
    });


    function displayGrid(prodNum){

        request("./product/"+prodNum).then(function(list){

            if(list == "fail"){
                registry.byId("basicStandby1").hide();
                document.getElementById("errorMessage").innerHTML="Product number is not valid";
                document.getElementById("errorMessage").style.display = "block";
                document.getElementById("errorMessage").style.visibility = "visible";
                document.getElementById("productDetail").style.display = "none";
                document.getElementById("productDetail").style.visibility = "hidden";
            }else{

                var table=document.getElementById("productDetail");
                var data=JSON.parse(list);
                var itemDetail=data.product.items;
                delete data.product.items;
                delete data.product.data_longdescription;
                var headerArray=[];
                if(prodNum.trim().charAt(0) =='P'){
                    var table=document.createElement("TABLE");
                    var columnCount=Object.keys(data.product).length;
                    var keys=Object.keys(data.product);
                    var row=table.insertRow(-1);

                    for(var i=0;i<columnCount;i++){
                        var headerCell=document.createElement("TH");
                        var headerName=keys[i]; 
                        var imageURL = data.product[headerName];
                        if((headerName.indexOf("longdescription")>-1)){
                            delete data.product.headerName;
                        }
                        else{
                            if(imageURL.indexOf(".jpg") > -1){
                                data.product[headerName]="<img src='http://prod.tgw.com/wcsstore/CatalogAssetStore/"+imageURL+"'>";
                            }
                            headerCell.innerHTML=headerName.substring(headerName.lastIndexOf(".") + 1);
                            row.appendChild(headerCell);
                        }
                    }
                    var rowCount=Object.keys(data).length;
                    for(var k=0;k<rowCount;k++){

                        var row=table.insertRow(-1);

                        for(var j=0;j<columnCount;j++){


                            if(!(keys[j].indexOf("longdescription")>-1)){
                                var cell=row.insertCell(-1);
                                var name=keys[j];
                                cell.innerHTML = data.product[name];
                            }
                        }
                    }


                    var div = document.getElementById("productTable");
                    div.appendChild(table);

                }

                var  vv=prodNum.charAt(0);
                if(prodNum.trim().charAt(0) == 'I'){

                    document.getElementById("productTable").innerHTML = "Product Details not available";
                }

                var itemDetailArray=[];
                for(var item in itemDetail){

                    for(var uu in itemDetail[item]){

                        if(!(itemDetailArray.indexOf(uu)>-1)){

                            itemDetailArray.push(uu);
                        }
                    }
                }


                var itemTable = document.createElement('TABLE');
                var itemTableClone = document.createElement('TABLE');
                var itemHead = document.createElement("THEAD");
                var tableBody=document.createElement("TBODY");
                itemTable.appendChild(itemHead);
                itemTable.appendChild(tableBody);


                var row1=itemHead.insertRow(-1);

                itemTable.id='scrollTable';
                itemHead.id='fixedHeader';
                tableBody.id='scrollContent';
                itemTableClone.id='header-fixed';


                var itemArray=[];
                var headerArray=[];
                var arrayCheck=[];
                for (var itemCount in itemDetail){

                    var dataArray=[];
                    var imageArray=[];
                    var itemDetails=[];

                    for (var j in itemDetail[itemCount]){

                        var itemDataDetail=itemDetail[itemCount][j];
                        dataArray.push(j);
                        itemDetails.push({
                            key:j,
                            value:itemDataDetail
                        });


                    }   

                    for (var i in itemDetailArray){

                        if(!(dataArray.indexOf(itemDetailArray[i])>-1)){

                            itemDetails.push({
                                key:itemDetailArray[i],
                                value:null
                            });

                        }
                var myList = sortByKey(itemDetails, "key");     


                    }


                    if(itemCount==0){
                        var headerEDP=document.createElement("TH");
                        headerEDP.innerHTML="EDP Number";
                        row1.appendChild(headerEDP);
                        for (var i in myList){

                            document.getElementById("productDetail").style.display = "block";
                            document.getElementById("productDetail").style.visibility = "visible";
                            var j=myList[i].key;
                            var data=myList[i].value;

                        if(!((j.indexOf("variations.color")>-1)||(j.indexOf("parentid")>-1)||(j.indexOf("partnumber")>-1)||(j.indexOf("image")>-1)||(j.indexOf("ii.mercentSKU")>-1))){

                                if(!(j.indexOf("longdescription")>-1)){


                                    if(j.indexOf("attributes.productid")>-1){

                                        var headerCell1=document.createElement("TH");
                                        headerCell1.innerHTML="MerchPIN";
                                        row1.appendChild(headerCell1);

                                    }else if(j.indexOf("webproductid")>-1){

                                        var headerCell1=document.createElement("TH");
                                        headerCell1.innerHTML="PID";
                                        row1.appendChild(headerCell1);


                                    }else if(j.indexOf("partnumber")>-1){

                                        var headerCell1=document.createElement("TH");
                                        headerCell1.innerHTML="EDPNumber";
                                        row1.appendChild(headerCell1);


                                    }else if(j.indexOf("shortdescription")>-1){

                                        var headerCell1=document.createElement("TH");
                                        headerCell1.innerHTML="Name";
                                        row1.appendChild(headerCell1);


                                    }else if(j.indexOf("tgwesiteproductspricelist")>-1){

                                        var headerCell1=document.createElement("TH");
                                        headerCell1.innerHTML="Price";
                                        row1.appendChild(headerCell1);


                                    }else if(j.indexOf("msrptgwpricelist")>-1){

                                        var headerCell1=document.createElement("TH");
                                        headerCell1.innerHTML="SRP";
                                        row1.appendChild(headerCell1);


                                    }else if(j.indexOf("attributes.color")>-1){

                                        var headerCell1=document.createElement("TH");
                                        headerCell1.innerHTML="ColorCode";
                                        row1.appendChild(headerCell1);


                                    }

                                    else{

                                        var headerCell1=document.createElement("TH");
                                        var header_name = itemDetails[i].key;
                                        headerCell1.innerHTML=j.substring(j.lastIndexOf(".") + 1);
                                        row1.appendChild(headerCell1);
                                    }
                            }
                            }
                        } 

                    }
                    itemArray=[];
                    headerArray=[];

                    var row2=tableBody.insertRow(-1);
                    var EDPnumber;
                    for (var i in myList){

                        var j=myList[i].key;
                        var data=myList[i].value;


                        if(data!=null){
                            if((j.indexOf("partnumber")>-1)&&(data.trim().charAt(0) =='I')){

                                EDPnumber=data;
                            }
                            if(j.indexOf("image")>-1){

                                if(data.indexOf(".jpg")>-1){

                                    imageArray.push({
                                        key:j,
                                        value:data
                                    });
                                }else{
                                    if(!(j.indexOf("parentid")>-1)){
                                        imageArray.push({
                                            key:j,
                                            value:null
                                        });
                                    }

                                }


                            }
                        }else{
                            if((j.indexOf("image")>-1)){

                                imageArray.push({
                                    key:j,
                                    value:data
                                });
                            }
                        }

                        var j=myList[i].key;
                        var data=myList[i].value;


                        if(!((j.indexOf("variations.color")>-1)||(j.indexOf("parentid")>-1)||(j.indexOf("partnumber")>-1)||(j.indexOf("image")>-1)||(j.indexOf("ii.mercentSKU")>-1))){
                            //if(!((itemArray.indexOf(data) >-1) && (headerArray.indexOf(j.substring(j.lastIndexOf(".") + 1)) >-1))){

                            if(!(j.indexOf("longdescription")>-1)){
                                var cell=row2.insertCell(-1);

                                if(data!=null){
                                    if(data.indexOf(".jpg") > -1){

                                        if(j.indexOf("zoom") > -1){
                                            data="<a href='http://prod.tgw.com/wcsstore/CatalogAssetStore/"+data+"'>Click to view Zoom Image</a>";
                                            cell.innerHTML=data;

                                        }else{
                                            data="<img src='http://prod.tgw.com/wcsstore/CatalogAssetStore/"+data+"'>";
                                            cell.innerHTML=data;
                                        }
                                    }else{
                                        cell.innerHTML=data;
                                    }
                                }

                                if(data==null){
                                    cell.innerHTML=data;
                                }

                            }

                        }




                    } 

                    console.log(imageArray);
                    for(var i in imageArray){


                        var imageData=imageArray[i].value;
                        imageKey=imageArray[i].key;
                        if(itemCount==0){
                            var headerCell1=document.createElement("TH");

                            if(imageKey.indexOf("zoom")>-1){
                                headerCell1.innerHTML="Zoom Image";
                            }else if(imageKey.indexOf("fullimage")>-1){
                                headerCell1.innerHTML="Full Image";
                            }else if(imageKey.indexOf("thumbnail")>-1){
                                headerCell1.innerHTML="ThumbNail Image";
                            }else{
                                headerCell1.innerHTML=imageKey;
                            }

                            row1.appendChild(headerCell1);
                        }

                        if((imageArray[i].key).indexOf("zoom") > -1){
                            var cell=row2.insertCell(-1);

                            if(imageData !=null){
                                imageData="<a href='http://prod.tgw.com/wcsstore/CatalogAssetStore/"+imageData+"'>Click to view Zoom Image</a>";
                            }else{
                                imageData=null;
                            }


                            cell.innerHTML=imageData;

                        }else{
                            var cell=row2.insertCell(-1);

                            if(imageData !=null){
                                imageData="<img src='http://prod.tgw.com/wcsstore/CatalogAssetStore/"+imageData+"'>";
                            }else{
                                imageData=null;
                            }


                            cell.innerHTML=imageData;
                        }


                    }
                    var cell=row2.insertCell(0);
                    cell.innerHTML=EDPnumber;
                }


                var div1 = document.getElementById("tableContainer");
                div1.appendChild(itemTable);
                document.getElementById("tableContainer").className = "tableContainer";
                document.getElementById("scrollTable").className = "fixed_headers";
                document.getElementById("scrollTable").style.width="100%";
                document.getElementById("fixedHeader").className = "fixedHeader";
                document.getElementById("scrollContent").className = "scrollContent";


            }




        });

        //document.getElementById("productDetail").style.display = "none";
        //document.getElementById("productDetail").style.visibility = "hidden";
    }






    on(dom.byId("submitButton"), "click", function(){

        registry.byId("basicStandby1").show();
        //document.getElementById("productDetail").style.display = "none";
        //document.getElementById("productDetail").style.visibility = "hidden";
        var table=document.getElementById("productDetail");
        document.getElementById("productTable").innerHTML="";
        document.getElementById("tableContainer").innerHTML="";
        var productNumber=document.getElementById("productNumber").value;
        var domain=document.getElementById("domain").value;
        if(productNumber== ""){
            //registry.byId("basicStandby1").hide();
            document.getElementById("errorMessage").innerHTML="Please enter Product number";
            document.getElementById("productDetail").style.display = "none";
            document.getElementById("productDetail").style.visibility = "hidden";
            document.getElementById("errorMessage").style.display = "block";
            document.getElementById("errorMessage").style.visibility = "visible";
        }
        else{

            document.getElementById("errorMessage").style.display = "none";
            document.getElementById("errorMessage").style.visibility = "hidden";
            displayGrid(productNumber);

        }
        });

});

下面是我的css代码:这个css代码我从网上得到它有固定的标题,但它似乎不起作用。

.fixed_headers {
  width: 750px;
  table-layout: fixed;
  border-collapse: collapse;
}
.fixed_headers th {
  text-decoration: underline;
}
.fixed_headers th,
.fixed_headers td {
  padding: 5px;
  text-align: left;
}
.fixed_headers td:nth-child(1),
.fixed_headers th:nth-child(1) {
  min-width: 200px;
}
.fixed_headers td:nth-child(2),
.fixed_headers th:nth-child(2) {
  min-width: 200px;
}
.fixed_headers td:nth-child(3),
.fixed_headers th:nth-child(3) {
  width: 350px;
}
.fixed_headers thead {
  background-color: #333333;
  color: #fdfdfd;
}
.fixed_headers thead tr {
  display: block;
  position: relative;
}
.fixed_headers tbody {
  display: block;
  overflow: auto;
  width: 100%;
  height: 300px;
}
.fixed_headers tbody tr:nth-child(even) {
  background-color: #dddddd;
}
.old_ie_wrapper {
  height: 300px;
  width: 750px;
  overflow-x: hidden;
  overflow-y: auto;
}
.old_ie_wrapper tbody {
  height: auto;
}

请帮我修一下这张桌子的标题。我在html页面中分别显示了很少的其他div和表。但是上面的表可能包含多达50个不同宽度的列,并且在滚动时必须有固定的标题。

0 个答案:

没有答案