js 異常之ueditor複製word文檔表格時,格式錯亂

ueditor網址

問題: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章