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 相关文章推荐
取得父标签
Nov 14 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
Aug 20 Javascript
javascript中的altKey 和 Event属性大全
Nov 06 Javascript
纯js实现瀑布流布局及ajax动态新增数据
Apr 07 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
Mar 29 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
jQuery选择器特殊字符与属性空格问题
Aug 14 jQuery
解决vue+webpack打包路径的问题
Mar 06 Javascript
详解react-redux插件入门
Apr 19 Javascript
VuePress 中如何增加用户登录功能
Nov 29 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求最大子序列和的算法实现
2011/06/24 PHP
深入密码加salt原理的分析
2013/06/06 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
php获取linux命令结果的实例
2017/03/13 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
jQuery 表格插件整理
2010/04/27 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
Node.js 的模块知识汇总
2017/08/16 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
跟老齐学Python之for循环语句
2014/10/02 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python实现报表自动化详解
2017/11/16 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
详解Python的三种拷贝方式
2020/02/11 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
传播学专业毕业生自荐信
2013/11/04 职场文书
汽修专业学生自我鉴定
2013/11/16 职场文书
期末复习计划
2015/01/19 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL