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 相关文章推荐
json2.js的初步学习与了解
Oct 06 Javascript
javascript之典型高阶函数应用介绍
Jan 10 Javascript
Js与下拉列表处理问题解决
Feb 13 Javascript
js判断iframe内的网页是否滚动到底部触发事件
Mar 18 Javascript
js监听鼠标事件控制textarea输入字符串的个数
Sep 29 Javascript
JavaScript制作简单分页插件
Sep 11 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
Oct 24 Javascript
微信小程序如何获取用户信息
Jan 26 Javascript
微信小程序框架的页面布局代码
Aug 17 Javascript
使用typescript改造koa开发框架的实现
Feb 04 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 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数据库操作类代码(增,删,改,查)
2013/04/08 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
php和nginx交互实例讲解
2019/09/24 PHP
php给数组赋值的实例方法
2019/09/26 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
市场营销工作计划书
2014/05/06 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
研究生导师评语
2014/12/31 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
小爸爸观后感
2015/06/15 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
django上传文件的三种方式
2021/04/29 Python
springboot如何初始化执行sql语句
2021/06/22 Java/Android