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 相关文章推荐
Js 随机数产生6位数字
May 13 Javascript
getElementByIdx_x js自定义getElementById函数
Jan 24 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
Aug 02 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
jquery实现折叠菜单效果【推荐】
Mar 08 Javascript
微信小程序页面开发注意事项整理
May 18 Javascript
基于require.js的使用(实例讲解)
Sep 07 Javascript
ECMAScript6变量的解构赋值实例详解
Sep 19 Javascript
vue实现图片加载完成前的loading组件方法
Feb 05 Javascript
vue项目打包之后背景样式丢失的解决方案
Jan 17 Javascript
js重写alert事件(避免alert弹框标题出现网址)
Dec 04 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
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
质检员的岗位职责
2013/11/15 职场文书
在校学生职业规划范文
2014/01/08 职场文书
新春文艺演出主持词
2014/03/27 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS