用dom操作替代正則表達式

来源:http://www.cnblogs.com/shouce/archive/2016/04/13/5385675.html
-Advertisement-
Play Games

在B/S結構客戶端越來越“胖”的今天,作為一名全端程式員,您很可能會在前端操作html字元串,註意,是操作html字元串,不是操作當前頁面的html。 舉個例子,百度推出的線上HTML富文本編輯器Ueditor,可以線上製作富文本文檔,功能堪比精簡版的Microsoft Word。雖然Ueditor ...


         在B/S結構客戶端越來越“胖”的今天,作為一名全端程式員,您很可能會在前端操作html字元串,註意,是操作html字元串,不是操作當前頁面的html。

         舉個例子,百度推出的線上HTML富文本編輯器Ueditor,可以線上製作富文本文檔,功能堪比精簡版的Microsoft Word。雖然Ueditor身披百度的光環,但實際效果不太讓人滿意,我們需要二次處理一下它生成的html字元串,比如把所有圖片的寬度設成90%。

         通過某個方法,我們可以拿到文本編輯器中的html字元串,假設字元串如下:

複製代碼
1 <p>花一樣的騷年</p>
2 <img src="./saonian.png" alt="騷年自拍" >
3 <p>迷一樣的金字塔</p>
4 <img style="height:30px;" src="./jinzita.png" alt="中國金字塔" >
5 <p>夢一樣的人生</p>
6 <img style="width:50px;height:30px;" src="./rensheng.png" alt="人生百態" >
複製代碼

 

         但是接下來如何處理呢?優雅的處理字元串,讓我們很容易想到正則表達式,這裡我們可不可以用正則呢?

         答案是肯定的,先試試正則的效果。把所有圖片寬度設成90%,最簡單的方法是在img標簽中加入style屬性,然後在style中指定寬度。

         用正則,第一步,先要匹配到所有img標簽,由於img標簽不一定有style屬性,要先判斷是否有style屬性,接下來直接在style屬性中加入width: 90%;?不,這樣可能會覆蓋掉原有的其他屬性,那就直接追加,追加不會覆蓋!還是不行,萬一原來就有width呢。。。

         還沒開始寫正則表達式,先想想過程,就已經很繁瑣了,其實實現起來更加複雜。

         幸好我們可以換個思路,藉助於jQuery解決這個問題。

         jQuery強大之處在於,它能直接將一個html字元串包裝成dom元素,這個dom元素不存在於當前頁面中,它是放在記憶體中的。

         通過jQuery,只需要這樣一段代碼即可實現:

複製代碼
 1 //定義容器,方便獲取修改後的html字元串
 2 //直接用jQuery包裝"<div></div>",此時在記憶體中就有了一個div元素
 3 var $container = $("<div></div>");
 4 //假設這是需要修改的html字元串
 5 var html = "<img style='width: 50%;' src='./test.jpg' >";
 6 //直接將要修改的html字元串插入到容器中
 7 //jQuery強大到自動將html字元串包裝成dom元素,然後插入到記憶體中的div容器中
 8 $container.append(html);
 9 //在容器中搜索所有的img標簽,並遍歷
10 $container.find("img").each(function(i,n){
11   //對於每一個img元素,直接修改其style屬性中的width屬性
12   //如果style屬性沒有,自動添加;如果已經有width屬性,直接修改;完全不用過多操心
13   $(n).css({
14     width: "90%"
15   });
16 });
17 //獲取修改後的html字元串,即容器的html內容
18 alert($container.html());
複製代碼

         代碼中註釋很詳細,小菜就不多解釋啦,我們要明白,jQuery不僅僅可以操作實實在在的頁面中的html,也可以操作記憶體中的虛擬html。

         通過兩者對比,相信讀者立即可以體會到哪個方法更好一些。

         正如小菜經常說的一句話:如果你認為一個問題可以解決,但用了很長時間仍然沒有解決,很可能是你的思路錯了,換個角度想一想,問題迎刃而解!

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 1.離線緩存為HTML5開發移動應用提供了基礎 HTML5 Web Storage API可以看做是加強版的cookie,不受數據大小限制,有更好的彈性以及架構,可以將數據寫入到本機的ROM中,還可以在關閉瀏覽器後再次打開時恢複數據,以減少網路流量。 同時,這個功能算得上是另一個方向的後臺“操作記錄 ...
  • 效果預覽:http://hovertree.com/texiao/css/22/代碼如下: 源碼下載:http://hovertree.com/h/bjaf/l243x19a.htm 轉自:http://hovertree.com/h/bjaf/2hhi6cjy.htm 更多特效:http://ww ...
  • ...
  • div內嵌套p,div等元素出現的問題 http://caiceclb.iteye.com/blog/428085 文章內有些問題,可能不適應今天了。 正在學習前端,小問題是不能忽視的。 解決方案1是有問題的,margin:-1px;並不能解決高度增大問題,chrome,FF,Opara測試了下都不 ...
  • 用語義化標簽去寫你的HTML,相容IE6,7,8 HTML5增加了更多語義化的標簽,如header,footer,nav……讓我們在頁面編寫的時候,不需要再用下麵這種方法去佈局了: ? <div class="header">這是頭部</div> <div class="content">這是中間內 ...
  • 隨著科技的不斷發展,需要改變營銷策略的一個企業就變得非常重要。你不能指望用你的營銷工具來留住你的客戶。智能手機和平板電腦已經改變了消費者的行為方式。現在,人們甚至不想去他們的電腦或筆記本電腦,以檢查產品或服務,他們的願望。用智能手機在他們的手中,他們擁有的所有信息,他們需要在他們的指尖。因此,它已成 ...
  • 我們在很多網站看到,當我們滾動網頁時,網頁內的廣告或某個小區域並不會消失,而是浮動在屏幕的某個地方,特別是一些局域廣告。那麼這是怎麼實現的呢?本文將引用烏徒幫的跟隨屏幕滾動代碼,對此效果做詳解。 一、原始代碼 下麵是烏徒幫的跟隨屏幕滾動代碼,它的作用域為烏徒幫網頁兩側的邊欄,以及雙擊屏幕後的右側隱藏 ...
  • 一: 右側固定寬度 左側自適應 第一種方法:左側用margin-right,右側float:right 就可以實現。 HTML代碼可以如下寫: <div class="box-left"> <a href="" target="_blank">我是龍恩</a> </div> <div class=" ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...