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的一个简单的脚本验证插件
Apr 05 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
May 16 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
基于element-ui的rules中正则表达式
Sep 04 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
elementUI select组件使用及注意事项详解
May 29 Javascript
react实现antd线上主题动态切换功能
Aug 12 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 Javascript
JavaScript使用localStorage存储数据
Sep 25 Javascript
详解Webpack4多页应用打包方案
Jul 16 Javascript
JS删除对象中某一属性案例详解
Sep 08 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/11/23 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
Python 实现12306登录功能实例代码
2018/02/09 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
Python实现图片添加文字
2019/11/26 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python3常见函数range()用法详解
2019/12/30 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
供电工程专业求职信
2014/08/09 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
Golang获取List列表元素的四种方式
2022/04/20 Golang