vue數字公式篇 Tinymce結合使用(二)

繼上一篇的數字公式 , 這次的功能是將公式能插入編輯器以及修改

1、Tinymce 自定義 LateX 按鈕,打開公式編輯器窗口 LateX.vue

  window.tinymce.init({...//基礎配置這里我就不寫了setup(ed) {//自定義 LateX 按鈕ed.ui.registry.addButton('LateX', {text: 'LateX', // 按鈕文本onAction: function () {// 1. 獲取當前光標位置const latexEditorBookmark = ed.selection.getBookmark(2); // 獲取光標位置const editorId = ed.id; // 保存當前編輯器 IDconsole.log('activeEditorId:', editorId);// 2. 生成一個隨機的 ID,用于 wmath 標簽const uid = 'wmath-' + Math.random().toString(36).substr(2, 9);// 3. 創建一個 <wmath> 標簽并插入到光標處const wmathHtml = `<wmath contenteditable="false" data-id="${uid}" data-latex=""></wmath>`;ed.insertContent(wmathHtml); // 在光標位置插入 wmath 標簽// 4. 打開公式編輯器窗口,并傳遞光標位置、編輯器 ID 和 wmathIdconst url = `/LateX?editorId=${editorId}&wmathId=${uid}`;window.open(url, '_blank', 'width=1000,height=800,scrollbars=no,resizable=no');}});//點擊數字公式時打開窗口進行編輯var currentWmathElement = null;ed.on('click', function (e) {const wmathElement = e.target.closest('wmath');if (wmathElement) {currentWmathElement = wmathElement; // 👈 保存當前點擊的元素const latexContentRaw = wmathElement.getAttribute('data-latex') || '';console.log('at line 488: raw =', latexContentRaw);// 去除所有 $ 符號const latexContent = latexContentRaw.replace(/\$/g, '').trim();console.log('at line 489: cleaned =', latexContent);// 編碼后用于傳遞到彈窗const encoded = encodeURIComponent(latexContent);// 給 wmath 添加唯一 data-id,方便后續精準替換let wmathId = wmathElement.getAttribute('data-id');if (!wmathId) {wmathId = 'wmath-' + Math.random().toString(36).substr(2, 9);wmathElement.setAttribute('data-id', wmathId);}// 當前編輯器 ID 也保存下來(如果你有多個編輯器)const editorId = ed.id;// 打開編輯窗口并傳參(傳遞 data-id + 內容)window.open(`/LateX?id=${encoded}&wmathId=${wmathId}&editorId=${editorId}`,'_blank','width=1000,height=800,scrollbars=no,resizable=no');}});}})//監聽子頁面數據if (!window._wmath_listener_registered) {// 💾 新增公式插入點記錄let latexEditorBookmark = null;let activeEditorId = null;// 👂 message 監聽器:處理編輯 + 新增兩種情況window.addEventListener('message', function (event) {const data = event.data;console.log('data at line 648:', data);// ? 編輯現有公式:替換或刪除if (data && data.type === 'update-wmath') {const { editorId, wmathId, latex } = data;const newLatex = latex ? latex.trim() : '';if (!editorId || !wmathId) return;const targetEditor = tinymce.get(editorId);if (!targetEditor) return;const targetWmath = targetEditor.dom.select(`wmath[data-id="${wmathId}"]`, targetEditor.getBody())[0];if (targetWmath) {if (!newLatex) {// ? 刪除公式targetEditor.dom.remove(targetWmath);} else {// ? 更新公式targetWmath.setAttribute('data-latex', newLatex);targetWmath.innerHTML = newLatex;setTimeout(() => {if (typeof renderMathJax === 'function') {this.window.renderMathJax(editorId);}}, 10);}}}});// 🚩 標記為已注冊,防止重復window._wmath_listener_registered = true;}

注意:所有的公式都是 $$ 公式 $$ 并且都是反斜杠
富文本存儲的時候 <wmath data-latex="$$ 公式 $$"> $$ 公式 $$ </wmath>

這里解釋一下為什么不直接存儲$$ 公式 $$
原因:
1、我們是用戶編輯內容,最終有后端形成word文件,編輯在進行處理,這就會導致不能隨意存儲數據
2、所有直接$$ 公式 $$ 渲染之后 會取代原內容 轉成這樣的標簽 并且不會記錄公式,所以我才想著在套一個自定義的標簽在這里插入圖片描述
3、為什么不能渲染的時候直接把公式賦值到父級span標簽上呢,由于原因1,我是不能存儲span 以及 p這種常規的標簽 如果把公式放到標簽上 也沒辦法保證用戶就只錄入一個公式 而且這種直接賦值也是js去渲染的比較慢

綜上所述還是自定義標簽比較好 ,
在這里插入圖片描述
id是數字公式 wmathid 是 公式 唯一的id editorId則是編輯器的id 因為我會存在多個
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73576.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73576.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73576.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python數據增強和轉換

數據增強和轉換 固定轉換隨機轉換概率控制的轉換 固定轉換 邊緣補充像素(Pad)尺寸變換(Resize)中心截取(CenterCrop)頂角及中心截取(FiveCrop)尺灰度變換(GrayScale) 概率控制的轉換 隨機垂直翻轉(RandomVerticalFlip)隨機應用(RandomApply) # -*- coding: utf-8 -*- fro…

Ubuntu下UEFI安全啟動安裝Nvdia驅動

簡介 眾所周知&#xff0c;Ubuntu默認使用Nouveau開源驅動&#xff0c;其性能受限&#xff0c;因此我們需要安裝Nvidia專用驅動。 安裝專用驅動的一般方法非常簡單&#xff0c;只需要sudo ubuntu-drivers devices && sudo ubuntu-drivers autoinstall即可&#xff0c…

05_循環結構三目運算符

目錄 一、雙重for循環 練習 二、break關鍵字 三、continue 關鍵字 練習 四、三元運算 / 三目運算 一、雙重for循環 外層循環 循環一次&#xff0c;&#xff0c;&#xff0c;內層循環 循環一圈&#xff01;&#xff01;&#xff01; 循環里嵌套循環&#xff1a; for(var…

數據結構初階-二叉樹鏈式

目錄 1.概念與結構 2.二叉數鏈式的實現 2.1遍歷規則 2.2申請內存空間 2.3手動構建一棵二叉樹 2.4二叉樹結點的個數 2.5二叉樹葉子結點的個數 2.6二叉樹第K層結點個數 2.7二叉樹的高度 2.8二叉樹中查找值為x的結點 2.9二叉樹的銷毀 3.層序遍歷 3.1概念 3.2層序遍歷…

鴻蒙HarmonyOS NEXT之無感監聽

鴻蒙中存在一些無感監聽&#xff0c;這些監聽經過系統API封裝使用很簡單&#xff0c;但是對實際業務開發中有很重要&#xff0c;例如埋點業務、數據統計、行為上報、切面攔截等。 Navigation的頁面切換 在鴻蒙中Navigation被用來作為路由棧進行頁面跳轉&#xff0c;如果你想知…

批量處理word里面表格的空白行

1&#xff0c;隨便打開一個word文檔。 2&#xff0c;按下Alt F11 VBA編輯器,在左側的「工程資源管理器」窗口中找到Normal 項目,右鍵選擇插入->模塊。 彈出一下彈窗 3&#xff0c;輸入一下代碼 代碼&#xff1a; Sub RemoveEmptyTableRows()Dim tbl As TableDim row As R…

3ds Max 2026 新功能全面解析

一、視口性能與交互體驗升級 1. Hydra 2.0 視口渲染引擎 3ds Max 2026 引入了 Hydra 2.0&#xff0c;大幅優化了視口渲染性能&#xff0c;尤其是在處理復雜場景和高質量實時預覽時&#xff0c;流暢度提升顯著。 支持USD&#xff08;通用場景描述&#xff09;格式&#xff0c…

JVM垃圾回收筆記02-垃圾回收器

文章目錄 前言1.串行(Serial 收集器/Serial Old 收集器)Serial 收集器Serial Old 收集器相關參數-XX:UseSerialGC 2.吞吐量優先(Parallel Scavenge 收集器/Parallel Old 收集器)Parallel Scavenge 收集器Parallel Old 收集器相關參數-XX:UseParallelGC ~ -XX:UseParallelOldGC-…

圖解AUTOSAR_SWS_UDPNetworkManagement

AUTOSAR UDP 網絡管理 (UdpNm) 技術詳解 基于 AUTOSAR 規范的 UDP 網絡管理模塊可視化指南 目錄 AUTOSAR UDP 網絡管理 (UdpNm) 技術詳解 目錄1. 概述2. UdpNm 狀態機 2.1 狀態機概述2.2 主要狀態說明2.3 狀態轉換機制2.4 并行狀態3. UdpNm 架構設計 3.1 架構概述3.2 接口設計3…

android 圖形開發的技能學習路線

需要以下幾個方面的知識&#xff1a; OpenGL ES的基礎和高級應用圖形渲染管線的工作原理3D數學&#xff08;矩陣、向量、四元數&#xff09;著色器編程&#xff08;GLSL&#xff09;libGDX框架的使用和定制性能優化和內存管理跨平臺渲染技術 接下來&#xff0c;考慮如何結構化…

使用AI一步一步實現若依(26)

功能26&#xff1a;新增一個新員工培訓頁面 功能25&#xff1a;角色管理 功能24&#xff1a;菜單管理 功能23&#xff1a;從后端獲取路由/菜單數據 功能22&#xff1a;用戶管理 功能21&#xff1a;使用axios發送請求 功能20&#xff1a;使用分頁插件 功能19&#xff1a;集成My…

vue響應式原理剖析

一、什么是響應式? 我們先來看一下響應式意味著什么?我們來看一段代碼: m有一個初始化的值,有一段代碼使用了這個值; 那么在m有一個新的值時,這段代碼可以自動重新執行; let m = 20 console.log(m) console.log(m * 2)m = 40上面的這樣一種可以自動響應數據變量的代碼機…

無人機航電系統電池技術解析!

1. 常用電池類型 鋰聚合物電池&#xff08;LiPo&#xff09; 特點&#xff1a;高能量密度、輕量化、放電效率高&#xff0c;是目前主流選擇。 缺點&#xff1a;對過充/過放敏感&#xff0c;需嚴格管理&#xff0c;存在輕微膨脹或起火風險。 鋰離子電池&#xff08;Li-ion…

ubuntu下終端打不開的排查思路和解決方法

問題現象描述&#xff1a;ubuntu開機后系統桌面顯示正常&#xff0c;其他圖形化的app也都能打開無異常&#xff0c;唯獨只有terminal終端打不開&#xff0c;無論是鼠標點擊終端軟件&#xff0c;還是ctrlaltt&#xff0c;還是altF2后輸入gnome-terminal后按回車&#xff0c;這三…

Maven入門

1、簡介 Apache Maven是一個項目管理及自動構建工具&#xff0c;由Apache軟件基金會所提供。基于項目對象模型&#xff08;縮寫&#xff1a;POM&#xff09;概念&#xff0c;Maven利用一個中央信息片斷能管理一個項目的構建、報告和文檔等步驟。 2、作用 1&#xff09;依賴導…

Rk3588,Opencv讀取Gmsl相機,Rga yuv422轉換rgb (降低CPU使用率)

RK3588, 使用OpenCv 讀取 gmsl 相機,獲得yuv422格式圖像, 使用 rga 轉換 rgb 圖像。減少cpu占用率. 查看相機信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相機分辨率,輸出格式等信息,對應修改后續代碼測試… Driver Info:Driver name : rkcifCard type : rkc…

鴻蒙相機開發實戰:從設備適配到性能調優 —— 我的 ArkTS 錄像功能落地手記(API 15)

引言&#xff1a;為什么我要寫這份開發指南&#xff1f; 作為一名老技術&#xff0c;最近特別喜歡研究鴻蒙相機功能&#xff0c;而且目前已經更新到API15了&#xff0c;那么咱們更要好好研究一下。而且從手持云臺到車載記錄儀&#xff0c;每個項目都面臨獨特挑戰&#xff1a;車…

【NLP 49、提示工程 prompt engineering】

目錄 一、基本介紹 語言模型生成文本的基本特點 提示工程 prompt engineering 提示工程的優勢 使用注意事項 ① 安全問題 ② 可信度問題 ③ 時效性與專業性 二、應用場景 能 ≠ 適合 應用場景 —— 百科知識 應用場景 —— 寫文案 應用場景 —— 解釋 / 編寫…

數字轉換(c++)

【題目描述】 如果一個數 xx 的約數和 yy &#xff08;不包括他本身&#xff09;比他本身小&#xff0c;那么 xx 可以變成 yy &#xff0c;yy 也可以變成 xx 。例如 44 可以變為 33 &#xff0c;11 可以變為 77 。限定所有數字變換在不超過 nn 的正整數范圍內進行&#xff0c;…

如何同步fork的更新

當你fork了一個代碼倉庫后&#xff0c;要將其與原始源碼保持同步&#xff0c;可以按照以下步驟進行操作&#xff1a; 1. 添加原始倉庫作為遠程源 在本地命令行中&#xff0c;進入到你fork后的代碼倉庫目錄&#xff0c;然后使用以下命令添加原始倉庫&#xff08;通常稱為upstr…