【发布时间】:2020-03-04 08:05:17
【问题描述】:
我正在编写一个名为 Mergetable 的 tinymce 自定义插件。这将合并两个用户选择的表。
问题陈述:
- TinyMce 不允许选择两个表格,通过使用 shift 和鼠标我可以选择表格的内容。所以我不能使用 tinmce.activeeditor.selection.getNode() 方法而不是使用 tinmce.activeeditor.selection.getContent()。
- Form getcontent() 方法我得到了两个表的正确 html。在使用 tinmce.activeeditor.selection.setContent() 设置内容时进行一些操作后,两个表都正确合并,但另外两个空 td 表创建了一个在 top 和一个在 bottom 。请看下面的插件代码。
代码:
(function () {
var mergeTable = (function () {
'use strict';
tinymce.PluginManager.add("mergeTable", function (editor, url) {
function Merge(){
var selectedhtml=editor.selection.getContent();
//using getContent() as getnode returning body node
var dv=document.createElement('div');
dv.innerHTML= selectedhtml;
var tableElements = dv.getElementsByTagName('TABLE');
if (tableElements.length == 2) {
var tableOne = tableElements[0];
var tableTwo = tableElements[1];
var tempTable = null;
var offsetLeft = tableOne.offsetLeft;
var offsetTop = tableOne.offsetTop;
var elem = tableElements[0];
if (tableOne.nodeName == "TABLE" && tableTwo.nodeName == "TABLE") {
for (var r = 0; r < tableTwo.rows.length; r++) {
var newTR = tableOne.insertRow(tableOne.rows.length);
for (var i = 0; i < tableTwo.rows[r].cells.length; i++) {
var newTD = newTR.insertCell()
newTD.innerHTML = tableTwo.rows[r].cells[i].innerHTML;
newTD.colSpan = tableTwo.rows[r].cells[i].colSpan;
newTD.rowSpan = tableTwo.rows[r].cells[i].rowSpan;
newTD.style.cssText = tableTwo.rows[r].cells[i].style.cssText;
if (tableOne.style.border != "") {
newTD.style.border = "1px dotted #BFBFBF"
}
}
}
tableTwo.remove();
console.log(dv.innerHTML);
editor.selection.setContent(dv.innerHTML);
editor.nodeChanged();
}
else {
alert("Please select two tables");
}
}
}
editor.ui.registry.addButton('mergeTable', {
text: "Merge Table",
onAction: function(){ Merge();}
});
});
}());
}());
【问题讨论】:
标签: javascript wordpress tinymce tinymce-plugins tinymce-5