gpt4 book ai didi

javascript - 当上一行具有行跨度时,将行添加到所选行下方的 html 表格中

转载 作者:行者123 更新时间:2023-11-28 08:52:37 24 4
gpt4 key购买 nike

我有以下代码,可以使用上下文菜单插件将行添加到表格中,以便您可以右键单击要在下面添加行的单元格。

(function($){
function scanTable( $table ) {
var m = [];
$table.children( "tr" ).each( function( y, row ) {
$( row ).children( "td, th" ).each( function( x, cell ) {
var $cell = $( cell ),
cspan = $cell.attr( "colspan" ) | 0,
rspan = $cell.attr( "rowspan" ) | 0,
tx, ty;
cspan = cspan ? cspan : 1;
rspan = rspan ? rspan : 1;
for( ; m[y] && m[y][x]; ++x ); //skip already occupied cells in current row
for( tx = x; tx < x + cspan; ++tx ) { //mark matrix elements occupied by current cell with true
for( ty = y; ty < y + rspan; ++ty ) {
if( !m[ty] ) { //fill missing rows
m[ty] = [];
}
m[ty][tx] = true;
}
}
var pos = { top: y, left: x };
$cell.data( "cellPos", pos );
} );
} );
};

/* plugin */
$.fn.cellPos = function( rescan ) {
var $cell = this.first(),
pos = $cell.data( "cellPos" );
if( !pos || rescan ) {
var $table = $cell.closest( "table, thead, tbody, tfoot" );
scanTable( $table );
}
pos = $cell.data( "cellPos" );
return pos;
}
})(jQuery);

appendMe();

function appendMe() {
$('table.test td').find("em").remove()
$('table.test td').removeAttr("realCellEq").append(function(){
return "<em> " + $(this).cellPos().left + "</em>"
}).attr("realCellEq", function() {
return $(this).cellPos().left
});
}

$(function () {
$.contextMenu({
selector: 'table.test td',
items: {
"addRowBelow": {
name: "Add Row Below",
callback: function (key, options) {
$(this).parents("tr").after("<tr class='freshAdd'></tr>");
$(this).parents("tr").find("td").each( function() {
var thisRowSpan = ($(this).attr("rowspan")) ? $(this).attr("rowspan") : 1;
if(thisRowSpan > 1) {
$(this).attr("rowspan", (parseInt($(this).attr("rowspan"),10)+1));
} else {
$(this).clone().appendTo("tr.freshAdd");
}
});
$("tr.freshAdd").find("td").html("");
$("tr.freshAdd").removeClass("freshAdd");
appendMe();
}
}
}
});
});

问题是我无法弄清楚我需要做什么来考虑行跨度。

这是一个jsfiddle来解释我的意思。

http://jsfiddle.net/many_tentacles/sqjak/1/

最佳答案

您无法使用新添加的单元格添加新单元格的原因是,这些新添加的单元格包含一个名为 context-menu-active 的类,该类禁止您编写的函数添加单元格。

您需要在回调内进行一些小更改,例如:

$(".context-menu-active").removeClass('context-menu-active');

这将从任何新添加的单元中删除该类,因此它再次可用。

看看更新后的 fiddle : http://jsfiddle.net/Q5PgG/

关于javascript - 当上一行具有行跨度时,将行添加到所选行下方的 html 表格中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18959011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com