jQuery中用dom操作替代正则表达式

 更新时间:2014年12月29日 15:09:39   投稿:hebedich  
这篇文章主要介绍了jQuery中用dom操作替代正则表达式的方法,需要的朋友可以参考下

在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。

         通过两者对比,相信读者立即可以体会到哪个方法更好一些。

         正如小菜经常说的一句话:如果你认为一个问题可以解决,但用了很长时间仍然没有解决,很可能是你的思路错了,换个角度想一想,问题迎刃而解!

相关文章

  • jQuery实现的精美平滑二级下拉菜单效果代码

    jQuery实现的精美平滑二级下拉菜单效果代码

    这篇文章主要介绍了jQuery实现的精美平滑二级下拉菜单效果代码,通过响应鼠标事件动态修改页面元素属性实现二级下拉菜单效果,需要的朋友可以参考下
    2016-03-03
  • jQuery Deferred和Promise创建响应式应用程序详细介绍

    jQuery Deferred和Promise创建响应式应用程序详细介绍

    接下来我们一起探索一下JavaScript中的 Deferred 和 Promise 的概念Deferred 提供了一个抽象的非阻塞的解决方案(如Ajax 请求的响应),它创建一个promise对象,其目的是在未来某个时间点返回一个响应,感兴趣的可以参考下
    2013-03-03
  • jQuery实现的简单悬浮层功能完整实例

    jQuery实现的简单悬浮层功能完整实例

    这篇文章主要介绍了jQuery实现的简单悬浮层功能,结合完整实例形式分析了jQuery基于时间函数动态修改css样式实现窗口浮动效果的相关技巧,需要的朋友可以参考下
    2017-01-01
  • 12款经典的白富美型—jquery图片轮播插件—前端开发必备

    12款经典的白富美型—jquery图片轮播插件—前端开发必备

    图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果,本文向大家推荐12款实用的 jQuery 图片轮播效果插件感兴趣的朋友可以了解下哦
    2013-01-01
  • Jquery之美中不足小结

    Jquery之美中不足小结

    在QWrap群里讨论时,有同学问jquery/yui等已做到极致,我们有没必要再重复造一个叫QWrap的轮子?
    2011-02-02
  • jquery uploadify隐藏上传进度的实现方法

    jquery uploadify隐藏上传进度的实现方法

    下面小编就为大家带来一篇jquery uploadify隐藏上传进度的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • jquery弹出关闭遮罩层实例

    jquery弹出关闭遮罩层实例

    这篇文章介绍了jquery弹出关闭遮罩层实例,有需要的朋友可以参考一下
    2013-08-08
  • JQuery打造PHP的AJAX表单提交实例

    JQuery打造PHP的AJAX表单提交实例

    本实例只利用到JQuery类库本身的函数和功能,不需要第三方插件的支持。另外,所有表单信息都是利用PHPMailer类库邮件的形式发送给管理员。
    2009-11-11
  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    使用jQuery.form.js/springmvc框架实现文件上传功能

    这篇文章主要介绍了使用jQuery.form.js/springmvc框架实现文件上传功能,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • jquery offset函数应用实例

    jquery offset函数应用实例

    点击一个按钮,然后在按钮的下方显示一个div,当按钮位于角落时,div的位置设定就需要调整,不然,div将显示不完全.我打算使用offset()方法实现此功能
    2012-11-11

最新评论