javascript - 水平滚动时如何修复表格的某些列

标签 javascript css jsp

我做了一个13列的表格,所以不能一屏显示。 也就是说,我需要水平滚动表格以浏览表格中的所有数据。

我想要做的是,即使将它滚动到右侧,前 4 列也应该固定。

我找到了一个解决方案,它给出了 style{position:absolute; left:0} 到所有的 th 和 tr,对我不起作用。

因为行数不固定,我用javascript代码添加行。

我的html代码

    <div class="div_table">         
      <table>

            <thead>
                 <th>title1</th>
                 <th>title2</th>
                 <th>title3</th>
                 <th>title4</th>
                 <th>title5</th>
                 <th>title6</th>
                 <th>title7</th>
                 <th>title8</th>
                 <th>title9</th>
                 <th>title10</th>
                 <th>title11</th>
                 <th>title12</th>
                 <th>title13</th>
             </thead>



             <tbody id="my-tbody"></tbody>


        </table>
    </div>`

我的javascript代码

         var my_tbody = document.getElementById('my-tbody');





                    for(var i=0; i<data.length; i++){
                          var row = my_tbody.insertRow( my_tbody.rows.length ); 

                          var col1 = row.insertCell(0);
                          col1.innerHTML = data[i].section1;

                          var col2 = row.insertCell(1);
                          col2.innerHTML = data[i].section2;

                          var col3 = row.insertCell(2);
                          col3.innerHTML = data[i].product;

                          var col4 = row.insertCell(3);
                          col4.innerHTML = data[i].product_description;

                          var col5 = row.insertCell(4);
                          col5.innerHTML = data[i].status;

                          var col6 = row.insertCell(5);
                          col6.innerHTML = data[i].rate;

                          var col7 = row.insertCell(6);
                          col7.innerHTML = data[i].start_date;

                          var col8 = row.insertCell(7);
                          col8.innerHTML = data[i].completion_date;

                          var col9 = row.insertCell(8);
                          col9.innerHTML = data[i].proceed_detail;

                          var col10 = row.insertCell(9);
                          col10.innerHTML = data[i].schedule_detail;

                          var col11 = row.insertCell(10);
                          col11.innerHTML = data[i].issues;

                          var col12 = row.insertCell(11);
                          col12.innerHTML = data[i].in_charge;

                          var col13 = row.insertCell(12);
                          col13.innerHTML = data[i].se;
                    }

            }

如您所见,我的表格没有标签。 所以,行数总是在变化

最佳答案

好吧,如果您制作 2​​ 个不同的表格,您就可以做到。一个包含您不想移动的列,另一个包含其余列。

用这个 html:

<div class="container">
  <div class="first-table">
    <table>
      <tr>
        <td>First column </td>
        <td>second column </td>
        <td>third column</td>
        <td>fourth ccolumn</td>
      </tr>
      <tr>
        <td>First column </td>
        <td>second column </td>
        <td>third column</td>
        <td>fourth ccolumn</td>
      </tr>
      <tr>
        <td>First column </td>
        <td>second column </td>
        <td>third column</td>
        <td>fourth ccolumn</td>
      </tr>
    </table>
  </div>
  <div class="second-table">
    <table>
      <tr>
        <td>title1 as asd asd asdasda </td>
        <td>title1 as asd asd </td>
        <td>title1 as asd asd asd</td>
        <td>title1 as asd asd a</td>
        <td>title1 as asd asd asda</td>
        <td>title1 as asd asa</td>
        <td>title1 as asd asd asdas </td>
        <td>title1 as a</td>
        <td>title1 as asd asd asdas</td>
        <td>title1 as asd a</td>
        <td>title1 as asd asd</td>
        <td>title1 as asd a</td>
      </tr>
      <tr>
        <td>title1 as asd asd asdasda </td>
        <td>title1 as asd asd </td>
        <td>title1 as asd asd asd</td>
        <td>title1 as asd asd a</td>
        <td>title1 as asd asd asda</td>
        <td>title1 as asd asa</td>
        <td>title1 as asd asd asdas </td>
        <td>title1 as a</td>
        <td>title1 as asd asd asdas</td>
        <td>title1 as asd a</td>
        <td>title1 as asd asd</td>
        <td>title1 as asd a</td>
      </tr>
      <tr>
        <td>title1 as asd asd asdasda </td>
        <td>title1 as asd asd </td>
        <td>title1 as asd asd asd</td>
        <td>title1 as asd asd a</td>
        <td>title1 as asd asd asda</td>
        <td>title1 as asd asa</td>
        <td>title1 as asd asd asdas </td>
        <td>title1 as a</td>
        <td>title1 as asd asd asdas</td>
        <td>title1 as asd a</td>
        <td>title1 as asd asd</td>
        <td>title1 as asd a</td>
      </tr>
    </table>
  </div>
</div>

和CSS:

.container {
  white-space: nowrap;
  overflow: hidden;
  position: relative;
  width: 100%;
}

table {
  display: inline-block;
  background-color: #fff;
}

td {
  border: 1px solid #000;
  white-space: nowrap;
}

.first-table {
  position: absolute;
  left: 0;
}

.first-table tr td {
  background-color: pink;
}

.second-table {
  overflow: auto;
}

此时您的第一张 table 位于第二张 table 上方。然后使用一些 jquery,您可以计算第一个表格的宽度并将此值作为左边距添加到第二个表格:

$(document).ready(function() {
  var firsttablewidth = $('.first-table').outerWidth();
  $('.second-table table').css('margin-left', firsttablewidth - 2 + 'px');
});

它看起来像这样: FIDDLE

关于javascript - 水平滚动时如何修复表格的某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44176371/

相关文章:

javascript - 在另一个输入后在 Javascript 中添加值

CSS-背景颜色不会填充到滚动 div 的顶部

java - 跨 c 请求属性 :import contexts

java - Strust2从字符串到字节数组的类型转换错误?

jsp - 如何检查用户是否在 JSP 中具有特定角色?

javascript - 在 JQuery 中查找本月的第三个星期日

javascript - 如何使用在记事本中正确显示的 javascript 创建新行?

javascript - 如何将 react 路线绑定(bind)到显示的对话框?

html - 文本位于移动 View 的第一部分下方

html - col-*-push et col-*-pull 不工作