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 使用简明教程
Mar 05 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 Javascript
jquery获取复选框的值的简单实例
May 26 Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 Javascript
JS实现向iframe中表单传值的方法
Mar 24 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
Jun 29 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
js实时监控文本框输入字数的实例代码
Jan 18 Javascript
在微信小程序中使用图表的方法示例
Apr 25 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
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 stream_get_meta_data返回值
2013/09/29 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
js获取系统的根路径实现介绍
2013/09/08 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
django批量导入xml数据
2016/10/16 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
农田水利实习自我鉴定
2013/09/19 职场文书
双语教学实施方案
2014/03/23 职场文书
公司请假条格式
2014/04/11 职场文书
售后客服个人自我评价
2014/09/14 职场文书
2015年食品安全工作总结
2015/05/15 职场文书