解決ueditor表格拖拽沒反應的問題

来源:https://www.cnblogs.com/xbqn-ss/archive/2023/03/23/17249722.html
-Advertisement-
Play Games

React舊版的生命周期 初始化階段:由ReactDOM.render()觸發 初次渲染 1.constructor() 2.componentWillMount() 3.render() 4.componentDidMount() 一般在這個裡面做一些初始化的事情,如定時器,發送網路請求,訂閱消息 ...


背景

ueditor作為百度推出的富文本編輯框,以功能強大著稱。
筆者最近用這個編輯框做了一個自定義列印格式的功能。允許用戶在富文本編輯框中設定列印格式,再實際列印時,根據關鍵字替換資料庫中信息,然後調用富文本的列印功能進行列印。
筆者是集成在vue中使用的,用的版本為"vue-ueditor-wrap": "^2.5.6"
但是在設置列印格式的時候,筆者及客戶都發現該文本編輯框,推動表格時不宜拖動,除第一次拖動外,之後每次拖動,表格的寬度根本不動。且表格的行高太高,與文字之前有很大間距。

解決表格寬度不易拖動的問題

為瞭解決該問題,筆者對ueditor的源碼ueditor.all.js進行了研究。

分析過程

發現在表格邊框拖動的方法tableBorderDrag中,有以下幾行代碼,並經過代碼分析及跟蹤。各代碼作用註釋如下

 //邊框拖動
function tableBorderDrag( evt ) {
  //隱藏拖動標識線
  hideDragLine(me);
  //顯示拖動標識線
  getDragLine(me, me.document);
  me.fireEvent('saveScene');
  //設置拖動標識線的位置
  showDragLineAt(state, startTd);
  //設置滑鼠按下的標識
  mousedown = true;
  //拖動開始
  onDrag = state;
  //拖動時選中的單元格
  dragTd = startTd;
}

從代碼可知,每次滑鼠按下時,都是先隱藏標示線(remove),之後再顯示標識線(add)。從邏輯來說沒問題,但註意,其中加了一行代碼me.fireEvent('saveScene') 該代碼觸發了編輯框的自動保存事件。
又經過代碼分析,發現最終觸發了編輯框的contentchange事件。
contentchange事件的代碼如下。

//內容變化時觸發索引更新
//todo 可否考慮標記檢測,如果不涉及表格的變化就不進行索引重建和更新
me.addListener("contentchange", function () {
    var me = this;
    //儘可能排除一些不需要更新的狀況
    hideDragLine(me);
    if (getUETableBySelected(me))return;
    var rng = me.selection.getRange();

可以看到,該事件,同樣調用了hideDragLine方法,由此可知,拉寬表格時,表格拖動標識線經過了 先刪除、在新增、再刪除的過程。所以我們的拖動不起作用。

解決方法

好了,那麼我們只需要把tableBorderDrag函數中的me.fireEvent('saveScene');這一個句代碼隱藏掉即可。
經測試,表格已經可以完美拖動了。

表格的行與文字之前有很大間距問題

表格行列的自由拖動解決了,那麼還剩下表格的行與文字之間的間距。

分析過程

經過瀏覽器的開發者工具定位,很容易發現存在一個樣式

td, th {
    padding: 5px 10px;
    border: 1px solid #DDD;
}

padding屬性勾選掉之後,我們表格線與文字立馬貼合了。
那麼我們的任務就是把這個padding屬性添加的地方改掉即可。
ueditor.all.js搜索後,很容易定位到添加CSS的代碼
image

解決方法

我們把這個行代碼改掉,把padding設置為0或者1即可。
最終效果如圖:
image
註意:需要同步修改ueditor.parse.js中的對應的樣式位置,用於列印預覽與編輯框中展示的一致。

結語

至此,已經完美滿足我們用這個富文本編輯器作為列印格式使用的初衷。相比於使用成熟的列印格式配置插件,在列印需求不複雜的情況下,使用富文本編輯框做列印格式模版設置,也是一個快速開發的選擇。

註意

上述替換如果使用的是ueditor.all.min.js文件,還需要同步替換該文件對應的代碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL基礎:事務 事務簡介 事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要麼同時成功,要麼同時失敗。 預設MySQL的事務是自動提交的,也就是說,當執行一條DML(數據操作語言:對資料庫進行增刪改操作)語句,MySQL會 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: 蟹黃瓜子 文章來源:GreatSQL社區投稿 Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可抑制的容器中,然 ...
  • 摘要:本文主要講解數倉運維中遇到單SQL磁碟空間管控問題的解析和方案。 本文分享自華為雲社區《GaussDB(DWS)運維 -- 單SQL磁碟空間管控》,作者: 譡里個檔。 【問題描述】 執行部分SQL語句時出現如下報錯信息(具體數值可能因為配置有差異),本文針對根因和場景觸發場景,確定觸發此類問題 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: 王權富貴 文章來源:GreatSQL社區原創 背景 在一次日常測試中發現,kill 一個會話後,SQL語句依然在運行並沒終止;被kill的會話重 ...
  • 作者:京東科技 杜曉玉 前言 資料庫,交易系統中最核心依賴,數據持久化屬於最核心服務。 隨著互聯網的普及,大流量高併發的場景越來越多,7*24的交易系統對高可用要求越來越高,同時在“數據為王”大環境下,交易數據最終通過資料庫進行持久化存儲,資料庫成為整個系統最終重要服務,不能出一點問題,尤其核心P0 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: z 文章來源:GreatSQL社區原創 DBA崗位會被雲服務平臺取代嗎? 前段時間看到網上的一篇文章《你怎麼還在招聘DBA?》,引髮網友熱議。文 ...
  • 國際移動用戶識別碼( IMSI) international mobile subscriber identity 國際上為唯一識別一個移動用戶所分配的號碼。 從技術上講,IMSI可以徹底解決國際漫游問題。但是由於北美目前仍有大量的AMPS系統使用MIN號碼,且北美的MDN和MIN採用相同的編號,系 ...
  • 一、問題描述及操作 應用集成Health Kit SDK後,在華為手機上進行登錄授權時,返回錯誤碼50063。 1、查看相關錯誤碼。‘50063’在Health Kit錯誤碼中的描述是“安裝的HMS Core APK版本不匹配,無法調用介面。”提供的解決方案是“請安裝最新版本的HMS Core(AP ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...