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 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
用JavaScript编写COM组件的步骤
Mar 17 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
Nov 13 Javascript
jQuery Animation实现CSS3动画示例介绍
Aug 14 Javascript
关于onchange事件在IE和FF下的表现及解决方法
Mar 08 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
JS交换变量的方法
Jan 21 Javascript
JavaScript实现随机替换图片的方法
Apr 16 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 Javascript
EasyUI学习之Combobox级联下拉列表(2)
Dec 29 Javascript
使用Angular CLI从蓝本生成代码详解
Mar 24 Javascript
vue-rx的初步使用教程
Sep 21 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 基本语法格式
2009/12/15 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
Python实现学生成绩管理系统
2020/04/05 Python
python 实现A*算法的示例代码
2018/08/13 Python
python操作文件的参数整理
2019/06/11 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
教师节老师寄语
2015/05/28 职场文书
Java死锁的排查
2022/05/11 Java/Android