問題:ueditor的編輯區在複製來自word的表格數據時,會出現格式錯亂的問題
原因:
ueidtor在複製來至word的數據時,會對這些數據格式進行過濾。如果複製的數據中存在寬度單位爲%的數據,會將%號去掉。
例如width=“200%”,變成200,此時即默認爲寬度爲200px;
我們在複製Wps表格(部分)時,其table標籤及td標籤的width單位就是%
而我們只要將最外層的table的width單位變更爲%屬性即可
解決方法:
利用ue的內容變更事件,將數據中的“%”還原,流程如下:
1.添加ue的內容變更事件
2.捕捉當前editor的body內容(複製數據時,是將數據複製到body內)
3.依次遍歷body的子節點(可能複製多個表格),將子節點中時table數據的標籤屬性設置爲%類型
代碼如下
//監聽粘貼事件,解決"複製表格自動把標籤的width元素的百分比數據變成數值"的bug
$(function () {
//獲取ue元素
var ue = UE.getEditor('editor');
//爲ue綁定內容變更事件
ue.addListener('contentChange', function () {
//遍歷body子節點
for (var i = 0; i < ue.body.children.length; i++) {
//獲取當前節點的width屬性
var TagValue = ue.body.children[i].getAttribute('width');
//如果width存在,則判定屬性是否被改變
//注:ueidtor在複製<table>和<tr>數據是,會把百分比號去掉,例如200%變更爲200
if (TagValue != null && TagValue != undefined && TagValue != "") {
//獲取width的單位
var _widthUnit = TagValue.replace(/\d+/g, '');
//如果單位爲空,則說明已變更過,將之變更回來
if (_widthUnit == '' || _widthUnit == undefined) {
ue.body.children[i].setAttribute('width', TagValue + "%");
}
}
}
});
});
以上代碼放置在使用到了ueidtor插件的頁面中即可
我這邊比較貪懶
如果有更好方法的,可以一起分享
錯誤想法:
1.一開始想綁定粘貼事件,發現不管是editor內的標籤,還是其ueditor本身,都綁定不到,於是作罷。
2.然後想要獲取ueditor的document元素,並獲取document屬性的節點數據(因爲不止是最外層的table被變更),但是後續發現不像js的document元素 一樣,可以獲取子孫節點的數據,無效
所以目前只能藉助ueidtor本身的功能,進行類似二次開發的操作
另外,ueidtor之所以會將width的單位去除,一開始是爲了數據安全。而現在ueidtor目前已經不維護,所以可以的話。還是選用其他的插件,例如wangeditor