zoukankan      html  css  js  c++  java
  • AJAX异步获取HTML之后 JQuery EasyUI 的界面重绘的解决办法

    当AJAX异步获取了HTML代码之后,这一段代码是包含JQuery EasyUI 的属性和样式的,这时这些属性和样式并不会生效。这里说说解决方案

    我们先来了解页面在刷新或打开时JQuery EasyUI都干了些什么:

    在加载完HTML的时候,JQuery EasyUI 会找class=“easyui-xxxx”的样式来初始化JQuery EasyUI 控件,搜索JQuery EasyUI 混淆之后的源代码,找到这么一段:

    (function($){
    $.parser={auto:true,onComplete:function(_142){
    },plugins:["linkbutton","menu","menubutton","splitbutton","tree","combobox","combotree","numberbox","validatebox","numberspinner","timespinner","calendar","datebox","layout","panel","datagrid","tabs","accordion","window","dialog"],parse:function(_143){
    var aa=[];
    for(var i=0;i<$.parser.plugins.length;i++){
    var name=$.parser.plugins[i];
    var r=$(".easyui-"+name,_143);
    if(r.length){
    if(r[name]){
    r[name]();
    }else{
    aa.push({name:name,jq:r});
    }
    }
    }
    if(aa.length&&window.easyloader){
    var _144=[];
    for(var i=0;i<aa.length;i++){
    _144.push(aa[i].name);
    }
    easyloader.load(_144,function(){
    for(var i=0;i<aa.length;i++){
    var name=aa[i].name;
    var jq=aa[i].jq;
    jq[name]();
    }
    $.parser.onComplete.call($.parser,_143);
    });
    }else{
    $.parser.onComplete.call($.parser,_143);
    }
    }};
    $(function(){
    if(!window.easyloader&&$.parser.auto){
    $.parser.parse();
    }
    });
    })(jQuery);

    当看完之后$.parser.parse();这一句不就是重绘JQuery EasyUI 控件的么。当执行这一句话的时候JQuery EasyUI 会对整个页面的DOM进行解析,效率是比较慢的。当然我们AJAX异步获取的仅仅是一段HTML,没有必要对整个页面进行解析。

    当我们异步获取来的HTML放入一个容器里,比如这样

    $('#xxxx').html(异步获取回来的内容) ,我们在解析这一段异步获取回来的HTML中的JQuery EasyUI控件时,可以这样做:

    $.parser.parse($('#xxxx'));

    这样就只解析$('#xxxx')内部的HTML中的JQuery EasyUI控件。

    此测试已经通过,此方法很可靠。

  • 相关阅读:
    算法中时间复杂度概括——o(1)、o(n)、o(logn)、o(nlogn)
    Docker笔记
    struts框架
    引包问题
    官网下载
    WebService
    答辩问题整理
    小程序转发功能的实现
    小程序自定义组件及传值
    vue 点击下拉框
  • 原文地址:https://www.cnblogs.com/endsock/p/1870331.html
Copyright © 2011-2022 走看看