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 相关文章推荐
JavaScript对象模型-执行模型
Apr 28 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
Aug 15 Javascript
通过JS 获取Mouse Position(鼠标坐标)的代码
Sep 21 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
Nov 30 Javascript
javascript封装 Cookie 应用接口
Aug 07 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
Dec 13 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
微信小程序开发教程之增加mixin扩展
Aug 09 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 Javascript
新手入门js闭包学习过程解析
Oct 08 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 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
php4的session功能评述(三)
2006/10/09 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
复制本贴标题和地址的js代码
2008/07/01 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
js验证密码强度解析
2020/03/18 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
保荐人的岗位职责
2013/11/19 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
自我评价的范文
2014/02/02 职场文书
扬州个园导游词
2015/02/06 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
总结几个非常实用的Python库
2021/06/26 Python
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers