網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
在工作中有遇到這樣的需求,需要把hmtl的富文本內(nèi)容,進(jìn)行深色模式適配。原先的富文本內(nèi)容是在直接在webview上進(jìn)行展示。
解決思路:替換html中的內(nèi)容色值。
方案一:
直接使用replace進(jìn)行字符串替換,當(dāng)時(shí)是去判斷、標(biāo)簽,例如下代碼
newText.replace("<p>", "<p><span style=\"color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);\">")
存在問(wèn)題:
替換字符串存在很大的問(wèn)題,如果原本標(biāo)簽就是已有色值那就會(huì)出現(xiàn)問(wèn)題。所以我這邊還是尋找到另外一種方案。
方法二:
在assets中寫(xiě)一個(gè)空白頁(yè)的html文件,html中實(shí)現(xiàn)createTable函數(shù),用于接收富文本內(nèi)容,加載到table標(biāo)簽中,然后在createTable中執(zhí)行標(biāo)簽識(shí)別,添加色值或者替換色值的操作。是否是深色主題的標(biāo)簽可以在Url上拼接獲取。
經(jīng)過(guò)測(cè)試該方面完美解決問(wèn)題,后續(xù)需求變得也方便添加和修改。下面貼上代碼:
<script type="text/javascript"> var type = getQueryString('type'); //獲取<body>標(biāo)簽,跟換背景 if (type == 1) { document.body.style.backgroundColor = "#1F1832"; } else { document.body.style.backgroundColor = "#F7F8F9"; } function createTable(text) { var table = document.getElementById("table"); //獲取<body>標(biāo)簽,跟換背景 table.innerHTML = text //獲取p標(biāo)簽,插入添加內(nèi)容 var list = document.getElementsByTagName("P"); for (var i = 0; i < list.length; i++) { var spans = list[i].getElementsByTagName("span"); var aTag = list[i].getElementsByTagName("a"); if (aTag.length > 0) { for (var j = 0; j < aTag.length; j++) { if (aTag[j].style.backgroundColor == "rgb(255, 255, 255)") { if (type == 1) { aTag[j].style.backgroundColor = "rgb(31, 24, 50)"; } else { aTag[j].style.backgroundColor = "rgb(247, 248, 249)"; } } if (aTag[j].style.color == "rgb(51, 51, 51)") { if (type == 1) { aTag[j].style.color = "rgb(251, 250, 255)"; } } } } if (spans.length > 0) { for (var j = 0; j < spans.length; j++) { if (spans[j].style.backgroundColor == "rgb(255, 255, 255)") { if (type == 1) { spans[j].style.backgroundColor = "rgb(31, 24, 50)"; } else { spans[j].style.backgroundColor = "rgb(247, 248, 249)"; } } if (spans[j].style.color == "rgb(51, 51, 51)") { if (type == 1) { spans[j].style.color = "rgb(251, 250, 255)"; } } } } else { if (type == 1) { list[i].innerHTML = '<span style="color: rgb(251, 250, 255);">' + list[i].innerHTML; } else { list[i].innerHTML = '<span style="color: rgb(31, 24, 50);">' + list[i].innerHTML; } } } //獲取視頻標(biāo)簽,添加poster屬性 var videos = document.getElementsByTagName("video") for (var i = 0; i < videos.length; i++) { videos[i].setAttribute("poster", videos[i].src + '?x-oss-process=video/snapshot,t_1000,f_jpg') } } function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); var r = window.location.search.substr(1).match(reg); if (r != null) { return unescape(r[2]); } return 0; } </script>
可以在這里寫(xiě)好富文本 kindeditor.net/demo.php
富文本內(nèi)容:
<p style="text-align:center;"> 這 </p> <p style="text-align:center;"> 里 </p> <p style="text-align:center;"> 是 </p> <p style="text-align:center;"> 什 </p> <p style="text-align:center;"> 么 </p> <p style="text-align:center;"> 顏 </p> <p style="text-align:center;"> 色 </p> <p style="text-align:center;"> !!! </p>
演示效果:
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_55362248/article/details/122434315
相關(guān)推薦
- 2022-06-17 C語(yǔ)言?詳細(xì)講解數(shù)組參數(shù)與指針參數(shù)_C 語(yǔ)言
- 2022-01-06 ruoyi中生成的代碼表單,如果添加上傳功能-模板下載功能
- 2022-05-12 Kotlin any/none/all 函數(shù)
- 2021-11-06 C/C++?Qt?StringListModel?字符串列表映射組件詳解_C 語(yǔ)言
- 2022-09-17 C語(yǔ)言深入探索數(shù)據(jù)類(lèi)型的存儲(chǔ)_C 語(yǔ)言
- 2023-01-28 Shell中的單中括號(hào)和雙中括號(hào)的用法詳解_Linux
- 2022-07-06 python?pandas中的agg函數(shù)用法_python
- 2022-05-28 C#調(diào)用WebService的方法介紹_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支