Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 38084|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-7 13:08:02 | 显示全部楼层 |阅读模式

     

    博客分类:

    现象:

           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;  
    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,直接渲染其父节点就可以保证页面能被正确解析。

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

    试了下,可以。

     

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-6 14:44 , Processed in 0.069568 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表