jQuery中用dom操作替代正则表达式


Posted in Javascript onDecember 29, 2014

在B/S结构客户端越来越“胖”的今天,作为一名全端程序员,您很可能会在前端操作html字符串,注意,是操作html字符串,不是操作当前页面的html。

         举个例子,百度推出的在线HTML富文本编辑器Ueditor,可以在线制作富文本文档,功能堪比精简版的Microsoft Word。虽然Ueditor身披百度的光环,但实际效果不太让人满意,我们需要二次处理一下它生成的html字符串,比如把所有图片的宽度设成90%。

         通过某个方法,我们可以拿到文本编辑器中的html字符串,假设字符串如下:

<p>花一样的骚年</p>

<img src="./saonian.png" alt="骚年自拍" >

<p>迷一样的金字塔</p>

<img style="height:30px;" src="./jinzita.png" alt="中国金字塔" >

<p>梦一样的人生</p>

<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,只需要这样一段代码即可实现:

 //定义容器,方便获取修改后的html字符串

 //直接用jQuery包装"<div></div>",此时在内存中就有了一个div元素

 var $container = $("<div></div>");

 //假设这是需要修改的html字符串

 var html = "<img style='width: 50%;' src='./test.jpg' >";

 //直接将要修改的html字符串插入到容器中

 //jQuery强大到自动将html字符串包装成dom元素,然后插入到内存中的div容器中

 $container.append(html);

 //在容器中搜索所有的img标签,并遍历

 $container.find("img").each(function(i,n){

   //对于每一个img元素,直接修改其style属性中的width属性

   //如果style属性没有,自动添加;如果已经有width属性,直接修改;完全不用过多操心

   $(n).css({

     width: "90%"

   });

 });

 //获取修改后的html字符串,即容器的html内容

 alert($container.html());

         代码中注释很详细,小菜就不多解释啦,我们要明白,jQuery不仅仅可以操作实实在在的页面中的html,也可以操作内存中的虚拟html。

         通过两者对比,相信读者立即可以体会到哪个方法更好一些。

         正如小菜经常说的一句话:如果你认为一个问题可以解决,但用了很长时间仍然没有解决,很可能是你的思路错了,换个角度想一想,问题迎刃而解!

Javascript 相关文章推荐
javascript innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
jQuery技巧总结
Jan 01 Javascript
php析构函数的具体用法小结
Mar 11 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
javascript实现图片跟随鼠标移动效果的方法
May 13 Javascript
AngularJS 模块化详解及实例代码
Sep 14 Javascript
React Form组件的实现封装杂谈
May 07 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
Jul 10 jQuery
基于JS实现父组件的请求服务过程解析
Oct 14 Javascript
javascript使用链接跨域下载图片
Nov 01 Javascript
JavaScript异步操作的几种常见处理方法实例总结
May 11 Javascript
vue中template的三种写法示例
Oct 21 Javascript
jQuery中:animated选择器用法实例
Dec 29 #Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 #Javascript
JavaScript实现列出数组中最长的连续数
Dec 29 #Javascript
jQuery中document与window以及load与ready 区别详解
Dec 29 #Javascript
jQuery中:header选择器用法实例
Dec 29 #Javascript
JavaScript实现查找字符串中第一个不重复的字符
Dec 29 #Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
Dec 29 #Javascript
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
php面向对象中的魔术方法中文说明
2014/03/04 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
jQuery常用数据处理方法小结
2015/02/20 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
详解python 内存优化
2020/08/17 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
高中生职业规划范文
2014/03/09 职场文书
教师业务学习材料
2014/12/16 职场文书
个人委托书范文
2015/01/28 职场文书
画展邀请函
2015/01/31 职场文书
华清池导游词
2015/02/02 职场文书
小班下学期个人总结
2015/02/12 职场文书
留学推荐信怎么写
2015/03/26 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
Golang全局变量加锁的问题解决
2021/05/08 Golang
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫
Oracle用户管理及赋权
2022/04/24 Oracle