jQuery内存泄露解决办法

 更新时间:2016年12月13日 11:54:09   作者:Never_yu  
这篇文章主要为大家详细介绍了jQuery内存泄露解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文大家分享了jQuery内存泄露解决办法,供大家参考,具体内容如下

思路:为JQuery扩展删除jquery元素对象的方法,大大减轻内存泄露的压力

;(function($){
 if(!$.lui.widget) $.lui.widget = {};
 //$.lui.newGuid()生成随机32位id

 //如果采用此方式多次生成jquery对象的话,html代码字符串会在内存中多次重复,占用额外的内容,也会有泄露。而$("<span></span>").attr('id',_id)写法无此问题。

 $.lui.widget.__clean$ = $("<span id='" + $.lui.newGuid()+ "'></span>");
 /**
 * 释放jquery对象,无返回值。此方法用以解决jquery的内存泄露问题
 */
 $.fn.del = function( selector, keepData ) {
 if ( !selector || $.filter( selector, [ this ] ).length ) {
  // 释放dom对象
  var item = $(this);
  var clearItem = $.lui.widget.__clean$;
  item.appendTo(clearItem);
  $('*',clearItem).each(function(i, e) {
  (events = $.data(this, 'events')) && $.each(events, function(i, e1) {
   $(e).unbind(i + '.*');
  });
  $.event.remove(this);
  $.removeData(this);
  });
  clearItem[0].innerHTML = '';
  item = null;
 }
 };

 /**
 * 计算字符串在某元素上不折行时的长度
 * @param {jQuery} $Element jquery元素
 * @param {String} str 字符串
 * @returns  {Number}  字符串长度(px)
 */
 $.lui.widget.clacStrLength = function($Element,str){
   var _id = $.lui.newGuid();
   var $tmpSpan = $("<span></span>").attr('id',_id).css({
    'position':'absolute',
    'top':'-1000px'
   }).appendTo('body');
   var _width = $tmpSpan.css({
    'font-family':$Element.css('font-family'),
    'font-size':$Element.css('font-size'),
    'letter-spacing':$Element.css('letter-spacing'),
    'word-spacing':$Element.css('word-spacing'),
    'text-indent':$Element.css('text-indent')
   }).text(str).innerWidth();
   $tmpSpan.del();
   $tmpSpan = null;
   return _width;
 };

 /**
 * 在某元素上按像素截取字符串 (采用浏览器默认处理空白方式,不适用于复杂场景,仅用于不换行情况下按像素截取字符串)
 * @param $Element jquery元素(该元素的字体设置必须已经确定)
 * @param str 字符串
 * @param limit  像素值
 * @returns 按像素截取后的字符串
 */
 $.lui.widget.substrByPx = function($Element,str,limit){
 if($Element === undefined || !$Element instanceof $) return '';
 if(str === undefined || typeof str != 'string') return '';
 if(limit === undefined) return str;
 if(!str || limit <=0 ) return '';
 var _str = new String(str);

 var _id = $.lui.newGuid();
 var $tmpSpan = $("<span></span>").attr('id',_id).css({
  'position':'absolute',
  'top':'-1000px'
 }).appendTo('body');
 var _width = $tmpSpan.css({
  'font-family':$Element.css('font-family'),
  'font-size':$Element.css('font-size'),
  'letter-spacing':$Element.css('letter-spacing'),
  'word-spacing':$Element.css('word-spacing'),
  'text-indent':$Element.css('text-indent')
 }).text(str).innerWidth();
 while( _width >limit){
  _str = _str.substring(0, _str.length-1);
  _width = $tmp.text(_str).innerWidth();
 }
 $tmpSpan.del();
 $tmpSpan = null;
 return _str;
 }; 
})(jQuery);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于jQuery实现模拟页面加载进度条

    基于jQuery实现模拟页面加载进度条

    进度条的出现在于无法通过任何方法获取整个页面的大小和当前加载了多少,所以只能用进度条来模拟,接下来为大家介绍下实现方法,感兴趣的朋友可以参考下哈
    2013-04-04
  • Jquery-1.9.1源码分析系列(十一)之DOM操作

    Jquery-1.9.1源码分析系列(十一)之DOM操作

    dom操作主要包括append、prepend、before、after、replaceWith、appendTo、prependTo、insertBefore、insertAfter、replaceAll。其核心处理函数是domManip,本文给大家介绍Jquery-1.9.1源码分析系列(十一)之DOM操作,感兴趣的朋友一起学习吧
    2015-11-11
  • jquery.mousewheel实现整屏翻屏效果

    jquery.mousewheel实现整屏翻屏效果

    jQuery Mousewheel 用于添加跨浏览器的鼠标滚轮支持。 mousewheel事件的处理函数有一点小小的变化,它除了第一个参数event 外,还接收到第二个参数delta。通过参数delta可以获取鼠标滚轮的方向和速度。
    2015-08-08
  • jquery无法为动态生成的元素添加点击事件的解决方法(推荐)

    jquery无法为动态生成的元素添加点击事件的解决方法(推荐)

    下面小编就为大家带来一篇jquery无法为动态生成的元素添加点击事件的解决方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-12-12
  • jquery 延迟执行实例介绍

    jquery 延迟执行实例介绍

    延迟执行在某些特殊的情况下还是蛮有用的,实现的方法也很简单,本文有个不错的示例,有需要的朋友可以参考下,希望对大家有所帮助
    2013-08-08
  • jquery实现最简单的滑动菜单效果代码

    jquery实现最简单的滑动菜单效果代码

    这篇文章主要介绍了jquery实现最简单的滑动菜单效果代码,涉及jQuery基于鼠标事件操作页面元素动态变换的基本技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • $.each与$().each的区别示例介绍

    $.each与$().each的区别示例介绍

    $.each是一个通用的迭代函数,可用于近似地迭代 对象和数组,这个函数与$().each是专用用于迭代和执行jquery对象函数
    2014-03-03
  • jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载

    jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载

    今天我给大家介绍一款非常有趣的日期和时间选择器,它分为日期选择器datedropper以及时间选择器timedropper,他们俩尤其适合在移动端上应用。感兴趣的小伙伴一起学习吧
    2016-04-04
  • jQuery的插件列表(2010-1-25更新)

    jQuery的插件列表(2010-1-25更新)

    jQuery 是我最喜欢的一个Javascript框架,下文中包含了众多&#65533;&#65533;以为jQuery爱好者们使用的插件。如果你还知道其他的好东西,欢迎与大家分享。
    2011-08-08
  • jquery 实现复选框的全选操作实例代码

    jquery 实现复选框的全选操作实例代码

    这篇文章主要介绍了jquery 实现复选框的全选操作实例代码的相关资料,需要的朋友可以参考下
    2017-01-01

最新评论