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 相关文章推荐
Google韩国首页图标动画效果
Aug 26 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
Aug 21 Javascript
jQuery中$.each()函数的用法引申实例
May 12 Javascript
详解vue-router 2.0 常用基础知识点之router-link
May 10 Javascript
Vue中的字符串模板的使用
May 17 Javascript
Vue封装的可编辑表格插件方法
Aug 28 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
Aug 31 Javascript
如何使用 vue + d3 画一棵树
Dec 03 Javascript
Javascript读写cookie的实例源码
Mar 16 Javascript
JavaScript实现选项卡效果的分析及步骤
Apr 16 Javascript
微信小程序如何实现在线客服功能
Oct 16 Javascript
微信小程序获取当前位置和城市名
Nov 13 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
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
javascript下过滤数组重复值的代码
2007/09/10 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
np.random.seed() 的使用详解
2020/01/14 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
美容院营销方案
2014/03/05 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
师范生求职信
2014/06/14 职场文书
2014年社区综治工作总结
2014/11/17 职场文书