• jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法


     

    博客分类:

    现象:

           AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout" 等

    处理方法:

          在html片段加载完毕后使用

    Js代码  收藏代码
    1. $.parser.parse(context)  

         即可重新渲染。

    实现原理:

        首先附上jquery.parser.js的源码

    Js代码  收藏代码
    1. (function($){  
    2.     $.parser = {  
    3.         auto: true,  
    4.         plugins:['linkbutton','menu','menubutton','splitbutton','layout',  
    5.                  'tree','window','dialog','datagrid',  
    6.                  'combobox','combotree','numberbox','validatebox',  
    7.                  'calendar','datebox','panel','tabs','accordion'  
    8.         ],  
    9.         parse: function(context){  
    10.             if ($.parser.auto){  
    11.                 for(var i=0; i<$.parser.plugins.length; i++){  
    12.                     (function(){  
    13.                         var name = $.parser.plugins[i];  
    14.                         var r = $('.easyui-' + name, context);  
    15.                         if (r.length){  
    16.                             if (r[name]){  
    17.                                 r[name]();  
    18.                             } else if (window.easyloader){  
    19.                                 easyloader.load(name, function(){  
    20.                                     r[name]();  
    21.                                 })  
    22.                             }  
    23.                         }  
    24.                     })();  
    25.                 }  
    26.             }  
    27.         }  
    28.     };  
    29.     $(function(){  
    30.         $.parser.parse();  
    31.     });  
    32. })(jQuery);  

       框架默认在页面加载完成后自动使用$.parser.parse()对整个文档进行渲染

    1. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法:

    我们之所以在页面中,只要书写相应easyui的class,Easyui就能成功渲染页面,这是因为解析器在默认情况下,parser会在文档装载完成的时候($(document).ready)被调用一次,而且是渲染整个页面。

    然而当页面装载完后,如果用javascript生成的DOM中包含了Easyui支持控件的class,比如说,用javascript生成了以下代码:

    <a id="tt" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'">easyui</a>

     虽然页面上有这样的DOM了,但是没有被渲染为Easyui的linkbutton插件,原因是Easyui并不会一直监听页面,所以不会主动渲染,这时候就需要手工调用Easyui的parser进行解析了。

    手工调用需要注意以下几点:

    解析目标为指定DOM的所有子孙元素,不包含这个DOM自身:

    比如上面代码生成的HTML,id="tt"是我们想要的LinkButton,像下面代码去手工解析的话是得不到你想要的结果的:

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

    道理很简单,parser只渲染tt的子孙元素,并不包括tt自身,而它的子孙元素并不包含任何Easyui支持的控件class,所以这个地方就得不到你想要的效果了,应该这样写:

     $.parser.parse($('#tt').parent());

    渲染tt的父节点的所有子孙元素就可以了,不管你的javascript输出什么DOM,直接渲染其父节点就可以保证页面能被正确解析。

    ----------------------------------------------

    试了下,可以。

  • 相关阅读:
    多字段截取然后验证 js
    web端上传图片,截取证件照
    bootstrap学习
    响应式网站设计心得
    不懂这几个问题就落后了:Python、Android开发者必读!
    这48个Java技术点,让你的面试成功率提升5倍!
    C++之父谈C++:一天之内你就能学会出色使用C++
    常用正则表达式
    解决vs验证控件报错” WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping”问题
    怎么就那么难啊我去
  • 原文地址:https://www.cnblogs.com/exmyth/p/4532112.html
Copyright © 2020-2023  润新知