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 相关文章推荐
基于jquery的高性能td和input切换并可修改内容实现代码
Jan 09 Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
UI Events 用户界面事件
Jun 27 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
Javascript中的数组常用方法解析
Jun 17 Javascript
微信端开发--登录小程序步骤
Jan 11 Javascript
JSONP基础知识详解
Mar 19 Javascript
JavaScript之生成器_动力节点Java学院整理
Jun 30 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
使用javascript做时间倒数读秒功能的实例
Jan 23 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
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
白色公司:The White Company
2017/10/11 全球购物
2015暑期社会实践个人总结
2015/07/13 职场文书
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
Docker下安装Oracle19c
2022/04/13 Servers