解決document.execCommand執行fontSize不能超過48px的問題


發現問題


 

富文本編輯器,相信很多程序猿在項目中都使用過,就算開發中沒有使用,平時總會接觸到。

發現這個現象,來自於客戶的一次需求,我一直在項目中使用百度的UMeditor,這個可以理解為是精簡的UEditor ,先放一張圖。

圖上可以看到字體最大能設置到48(對應48px),客戶這邊要求提供更多的字號供選擇。

程序猿一貫邏輯,這個需求簡單,分分鍾解決。使用過這款編輯器的都知道百度是提供了可配置文件的,其中修改字號的地方見下圖。

進展到這里,按照常理功能就修改完了(增加字號后,富文本編輯器上面出現了新增的字號)。事實上要不是我動手測試了下,也就這么過去了,然后現實還是很殘酷的。奇怪的現象出現了,無論我選擇多大的字體(超過48px以上的字體),文本的字體還停留在以前的字體大小(也就是說以前是16px,我就算選了100px,它還是留着16px,但是我如果選擇24px、36px、48px這些字體大小就變了)。

即然我深信我配置沒有問題(畢竟參考了百度大廠的文檔配置的),那么就來查看源碼吧。

從源碼跟進來看,大廠居然把字體和對應尺寸寫死啦(當我第一次看到這個代碼的時候,我突然第一次發現我的代碼和大廠高手寫的代碼如此的相似,是不是我也擁有了去大廠工作的能力了?)。動手能力強的我決定改源碼,增加一堆新的字號和對應的尺寸(前面的是px后面的對應的是字號)。

滿心歡喜的我以為這下需求解決了,然后現實再一次打了臉,依然無效。好吧,大廠的代碼就深奧,可能有其他我沒有修改到的地方,繼續跟源碼。

 

終於跟到了執行更新字號的地方,一句執行命令,傳入了方法類型和字號,翻譯下來如下:

this.document.execCommand("fontsize", false, 7);

  

查找原因


 

通過上面的我們知道7對應了42px的字號。那我手動執行下命令看看效果。

依次執行了傳入字號 1 7 10,測試結果發現10沒有變化。那么原因在哪?查看下官方文檔吧。

官方文檔上面提到了字體尺寸(1-7),這個是重點圈起來要考!!!

解決方案


 

至此疑問解決了,解決方案直接見下面代碼吧。

document.execFontSize = function (size, unit) {
    var spanString = $('<span/>', {
        'text': document.getSelection()
    }).css('font-size', size + unit).prop('outerHTML');

    document.execCommand('insertHTML', false, spanString);
};

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM