jQuery中用dom操作替代正則表達(dá)式
在B/S結(jié)構(gòu)客戶端越來(lái)越“胖”的今天,作為一名全端程序員,您很可能會(huì)在前端操作html字符串,注意,是操作html字符串,不是操作當(dāng)前頁(yè)面的html。
舉個(gè)例子,百度推出的在線HTML富文本編輯器Ueditor,可以在線制作富文本文檔,功能堪比精簡(jiǎn)版的Microsoft Word。雖然Ueditor身披百度的光環(huán),但實(shí)際效果不太讓人滿意,我們需要二次處理一下它生成的html字符串,比如把所有圖片的寬度設(shè)成90%。
通過(guò)某個(gè)方法,我們可以拿到文本編輯器中的html字符串,假設(shè)字符串如下:
<p>花一樣的騷年</p>
<img src="./saonian.png" alt="騷年自拍" >
<p>迷一樣的金字塔</p>
<img style="height:30px;" src="./jinzita.png" alt="中國(guó)金字塔" >
<p>夢(mèng)一樣的人生</p>
<img style="width:50px;height:30px;" src="./rensheng.png" alt="人生百態(tài)" >
但是接下來(lái)如何處理呢??jī)?yōu)雅的處理字符串,讓我們很容易想到正則表達(dá)式,這里我們可不可以用正則呢?
答案是肯定的,先試試正則的效果。把所有圖片寬度設(shè)成90%,最簡(jiǎn)單的方法是在img標(biāo)簽中加入style屬性,然后在style中指定寬度。
用正則,第一步,先要匹配到所有img標(biāo)簽,由于img標(biāo)簽不一定有style屬性,要先判斷是否有style屬性,接下來(lái)直接在style屬性中加入width: 90%;?不,這樣可能會(huì)覆蓋掉原有的其他屬性,那就直接追加,追加不會(huì)覆蓋!還是不行,萬(wàn)一原來(lái)就有width呢。。。
還沒(méi)開(kāi)始寫(xiě)正則表達(dá)式,先想想過(guò)程,就已經(jīng)很繁瑣了,其實(shí)實(shí)現(xiàn)起來(lái)更加復(fù)雜。
幸好我們可以換個(gè)思路,借助于jQuery解決這個(gè)問(wèn)題。
jQuery強(qiáng)大之處在于,它能直接將一個(gè)html字符串包裝成dom元素,這個(gè)dom元素不存在于當(dāng)前頁(yè)面中,它是放在內(nèi)存中的。
通過(guò)jQuery,只需要這樣一段代碼即可實(shí)現(xiàn):
//定義容器,方便獲取修改后的html字符串
//直接用jQuery包裝"<div></div>",此時(shí)在內(nèi)存中就有了一個(gè)div元素
var $container = $("<div></div>");
//假設(shè)這是需要修改的html字符串
var html = "<img style='width: 50%;' src='./test.jpg' >";
//直接將要修改的html字符串插入到容器中
//jQuery強(qiáng)大到自動(dòng)將html字符串包裝成dom元素,然后插入到內(nèi)存中的div容器中
$container.append(html);
//在容器中搜索所有的img標(biāo)簽,并遍歷
$container.find("img").each(function(i,n){
//對(duì)于每一個(gè)img元素,直接修改其style屬性中的width屬性
//如果style屬性沒(méi)有,自動(dòng)添加;如果已經(jīng)有width屬性,直接修改;完全不用過(guò)多操心
$(n).css({
width: "90%"
});
});
//獲取修改后的html字符串,即容器的html內(nèi)容
alert($container.html());
代碼中注釋很詳細(xì),小菜就不多解釋啦,我們要明白,jQuery不僅僅可以操作實(shí)實(shí)在在的頁(yè)面中的html,也可以操作內(nèi)存中的虛擬html。
通過(guò)兩者對(duì)比,相信讀者立即可以體會(huì)到哪個(gè)方法更好一些。
正如小菜經(jīng)常說(shuō)的一句話:如果你認(rèn)為一個(gè)問(wèn)題可以解決,但用了很長(zhǎng)時(shí)間仍然沒(méi)有解決,很可能是你的思路錯(cuò)了,換個(gè)角度想一想,問(wèn)題迎刃而解!
- jQuery EasyUI 開(kāi)源插件套裝 完全替代ExtJS
- 深入理解jQuery中l(wèi)ive與bind方法的區(qū)別
- jQuery中.live()方法的用法深入解析
- 解析jQuery的三種bind/One/Live事件綁定使用方法
- jQuery中bind,live,delegate與one方法的用法及區(qū)別解析
- jquery live()調(diào)用不存在的解決方法
- jQuery的live()方法對(duì)hover事件的處理示例
- jQuery中對(duì)未來(lái)的元素綁定事件用bind、live or on
- jQuery 1.9使用$.support替代$.browser的使用方法
- jQuery 1.9移除了$.browser可以使用$.support來(lái)替代
- 淺談被jQuery拋棄的函數(shù)及替代函數(shù)
- jQuery中bind(),live(),delegate(),on()綁定事件方法實(shí)例詳解
- jquery ui dialog替代confirm實(shí)例分析
- jQuery1.9+中刪除了live以后的替代方法
相關(guān)文章
jQuery實(shí)現(xiàn)的精美平滑二級(jí)下拉菜單效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)的精美平滑二級(jí)下拉菜單效果代碼,通過(guò)響應(yīng)鼠標(biāo)事件動(dòng)態(tài)修改頁(yè)面元素屬性實(shí)現(xiàn)二級(jí)下拉菜單效果,需要的朋友可以參考下2016-03-03
jQuery Deferred和Promise創(chuàng)建響應(yīng)式應(yīng)用程序詳細(xì)介紹
接下來(lái)我們一起探索一下JavaScript中的 Deferred 和 Promise 的概念Deferred 提供了一個(gè)抽象的非阻塞的解決方案(如Ajax 請(qǐng)求的響應(yīng)),它創(chuàng)建一個(gè)promise對(duì)象,其目的是在未來(lái)某個(gè)時(shí)間點(diǎn)返回一個(gè)響應(yīng),感興趣的可以參考下2013-03-03
jQuery實(shí)現(xiàn)的簡(jiǎn)單懸浮層功能完整實(shí)例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的簡(jiǎn)單懸浮層功能,結(jié)合完整實(shí)例形式分析了jQuery基于時(shí)間函數(shù)動(dòng)態(tài)修改css樣式實(shí)現(xiàn)窗口浮動(dòng)效果的相關(guān)技巧,需要的朋友可以參考下2017-01-01
12款經(jīng)典的白富美型—jquery圖片輪播插件—前端開(kāi)發(fā)必備
圖片輪播是網(wǎng)站中的常用功能,用于在有限的網(wǎng)頁(yè)空間內(nèi)展示一組產(chǎn)品圖片或者照片,同時(shí)還有非常吸引人的動(dòng)畫(huà)效果,本文向大家推薦12款實(shí)用的 jQuery 圖片輪播效果插件感興趣的朋友可以了解下哦2013-01-01
jquery uploadify隱藏上傳進(jìn)度的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇jquery uploadify隱藏上傳進(jìn)度的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
使用jQuery.form.js/springmvc框架實(shí)現(xiàn)文件上傳功能
這篇文章主要介紹了使用jQuery.form.js/springmvc框架實(shí)現(xiàn)文件上傳功能,非常具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
jquery offset函數(shù)應(yīng)用實(shí)例
點(diǎn)擊一個(gè)按鈕,然后在按鈕的下方顯示一個(gè)div,當(dāng)按鈕位于角落時(shí),div的位置設(shè)定就需要調(diào)整,不然,div將顯示不完全.我打算使用offset()方法實(shí)現(xiàn)此功能2012-11-11

