You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RTL布局下Bootstrap Table拖拽表头调整列宽功能异常如何解决

问题原因

你使用的jquery-resizable-columns拖拽插件默认仅适配LTR(从左到右)布局,RTL场景下的鼠标偏移量计算、拖拽手柄位置都没有做适配,导致拖拽一列时偏移量被错误计算到相邻列上,出现同步变动的问题。

修复方案

1. 新增RTL适配样式

table[dir="rtl"] .rc-handle-container {
  left: 0 !important;
  right: auto !important;
}
table[dir="rtl"] .rc-handle {
  margin-left: -3px !important;
  margin-right: 0 !important;
}

2. 覆盖拖拽计算逻辑

重写resizableColumns的resize事件处理,对RTL场景的偏移量做反转:

$(document).ready(function () {
  // 判断表格是否为RTL布局
  const isRtl = $('table').attr('dir') === 'rtl';
  
  // 重写偏移量计算逻辑
  $.fn.resizableColumns.Constructor.prototype.onResize = function (e) {
    var that = this,
        $table = this.$table,
        startX = e.pageX,
        startWidth = this.$currentTh.width(),
        nextStartWidth = this.$nextTh.width();

    $(document).on('mousemove.rc', function (e) {
      var diffX = e.pageX - startX;
      // RTL下偏移量反转
      if (isRtl) {
        diffX = -diffX;
      }
      var newWidth = startWidth + diffX;
      var nextNewWidth = nextStartWidth - diffX;

      // 最小宽度限制,可根据需求自行调整
      if (newWidth < 30 || nextNewWidth < 30) return;

      that.$currentTh.width(newWidth);
      that.$nextTh.width(nextNewWidth);
      $table.trigger('column:resize', [that.$currentTh, newWidth, that.$nextTh, nextNewWidth]);
    });

    $(document).on('mouseup.rc', function () {
      $(document).off('mousemove.rc mouseup.rc');
      $table.trigger('column:resize:stop', [that.$currentTh, that.$nextTh]);
    });

    e.preventDefault();
  };

  // 初始化拖拽
  $('table').resizableColumns();
});

3. 修正HTML冗余配置

原代码中同时使用了bootstrap-table的data-resizable="true"属性和手动调用resizableColumns(),二者会产生冲突,删除table标签上的data-resizable="true"属性即可,最终table标签示例:

<table dir="rtl" data-toggle="table">
  <thead>
    <tr>
      <th> th1 </th>
      <th> th2 </th>
      <th> th3 </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td> td1 </td>
      <td> td2 </td>
      <td> td3 </td>
    </tr>
    <tr>
      <td> td1 </td>
      <td> td2 </td>
      <td> td3 </td>
    </tr> 
    <tr>
      <td> td1 </td>
      <td> td2 </td>
      <td> td3 </td>
    </tr>
  </tbody>
<table>

内容的提问来源于stack exchange,提问作者Saleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:36:03