JQuery UI可排序其他行在拖动时缩小

时间:2014-04-04 01:55:46

标签: jquery user-interface jquery-ui-sortable

我正在使用jQuery UI Sortable重新排序行。我有10(td)列,其中我只显示6个,其余4个未使用display:none显示。

我面临的问题是

  1. 在Chrome中,拖动所有其他行(而不是拖动的行)列缩小,然后在删除行后,它们会扩展到正常大小。拖动时为什么行列会缩小?

  2. 在IE8中与上述相同,但在删除行后,它们仍然处于缩小模式,并且未扩展到正常大小。

  3. 请找到以下代码。我的问题是其他行宽度正在缩小而不是可拖动的行。

                this.$('.reportTableBody').sortable({               
                tolerance:"pointer",
                //TODO need to fix
                cursor: 'move',
                revert: 'true',
                helper: function(e, tr)
                {
                    var myHelper = [];
                    myHelper.push('<table style="width: 100%">');
                    myHelper.push($(tr).html());
                    myHelper.push('</table>');
                    return myHelper.join('');                   
                },              
                create: function (event, ui) {                  
                     $("td").each(function () {
                            $(this).css("width", $(this).width());
                     });                                         
                    if (jQuery.browser.msie && Number(jQuery.browser.version) == 8) {
                        this.$('.reportTableBody').sortable("option", "cursorAt", { top: 100 });
                    }
                },
                stop : function(event, ui){                 
                    $(ui.item.parent()).find('tr').each(function(index){
                        $(this).find('.yearSelectCell:first').html(index + 1);
    
                    });                 
                    ui.item.trigger('drop', ui.item.index());                   
                }});                        
    

    仅供参考 - 有些列有display:none,它们会隐藏列。您是否认为因此柱宽正在缩小?

2 个答案:

答案 0 :(得分:1)

您可以编写帮助函数来专门设置宽度,如下所示:http://www.foliotek.com/devblog/make-table-rows-sortable-using-jquery-ui-sortable/,或者如果您的页面当前控制表格的列宽,您可以指定 &#34;克隆&#34; 帮助选项,然后选择 appendTo 选项,该选项将继承指定选择器的样式。

appendTo 的最简单选项可能适用于您的情况:将其设置为字符串&#34; parent&#34; 。这将导致拖动的帮助器成为可排序项的兄弟,从而继承其样式。

如果这些选项不符合您的需求,请发布一些代码或链接到JSFiddle。

答案 1 :(得分:0)

我的解决方案(希望其他的缩小表行);您需要设置每个单元格类,或从占位符行中删除它。为了确保原始值被复制而没有重叠或残差,我首先清除了所有'class'和'colspan'......

----- css ----
.ui-sortable-helper {
    display: table;
}

以及可排序表的任何选择器

----- js -----
$('tbody').sortable({
  placeholder: 'sortable-placeholder',
  handle: '.handle',
  helper: function(e, tr) {
    var helper;
    helper = tr.clone();
    helper.css('display', '');
    return helper;
  },
  start: function(event, ui) {
    return ui.placeholder.children().each(function(index, child) {
      var source;
      source = ui.helper.children().eq(index);
      $(child).removeAttr('class').removeAttr('colspan');
      $(child).addClass(source.attr('class'));
      if (source.attr('colspan')) {
        return $(child).attr('colspan', source.attr('colspan'));
      }
    });
  }
});