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 相关文章推荐
关于IE7 IE8弹出窗口顶上
Dec 22 Javascript
jquery给图片添加鼠标经过时的边框效果
Nov 12 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
详解js实现线段交点的三种算法
Aug 09 Javascript
bootstrap下拉菜单使用方法解析
Jan 13 Javascript
JS中的phototype详解
Feb 04 Javascript
用move.js库实现百叶窗特效
Feb 08 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
JS中关于正则的巧妙操作
Aug 31 Javascript
微信小程序实现YDUI的ScrollTab组件
Feb 02 Javascript
微信小程序登录态和检验注册过没的app.js写法
May 22 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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
德劲1107的电路分析与打磨
2021/03/02 无线电
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
10款最好的Python开发编辑器
2019/07/03 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
python创建文本文件的简单方法
2020/08/30 Python
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
会议活动邀请函
2014/01/27 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
物资采购方案
2014/06/12 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
Go 语言结构实例分析
2021/07/04 Golang
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis