admin 管理员组

文章数量: 1086019


2023年12月18日发(作者:iview上传组件怎么用)

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

2011-03-22 12:53

现象:

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

处理方法:

在html片段加载完毕后使用

Js代码

1. $.(context)

即可重新渲染。

实现原理:

首先附上的源码

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 ($.){

11. for(var i=0; i<$.; i++){

12. (function(){

13. var name = $.s[i];

14. var r = $('.easyui-' + name, context);

15. if (){

16. if (r[name]){

17. r[name]();

18. } else if (ader){

19. (name, function(){

20. r[name]();

21. })

22. }

23. }

24. })();

25. }

26. }

27. }

28. };

29. $(function(){

30. $.();

31. });

32. })(jQuery);

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

Js代码

1. $. //是否自动进行渲染

2. $.s //包含目前EasyUI框架中所有的插件名称

3. $.(context)

4. //context 为待查找的 DOM 元素集、文档或 jQuery 对象,为空时默认为整个文档

5. //渲染对象为: class="easyui-pluginName"的元素

jQuery EasyUI parser 的使用场景

2012年03月07日 ⁄ parser ⁄ 共 1237字 ⁄ 评论数 1 ⁄ 被围观 3,768 views+

文章目录

[隐藏]

o

o

1自动调用parser:

2手动调用parser:

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

2.2(2) 某些组件无法多次解析同一个DOM元素:

parser,故名意思,就是解析器的意思,别看他只有那么几行代码,jQuery Easyui 能够根据class就能正常渲染页面全靠它了。一般情况下,我们并用不到解析器,本文主要讨论一下,什么情况下会用到它,如何使用。

自动调用parser:

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

手动调用parser:

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

1

class="easyui-accordion"

id="tt">

2

title="title1">1

3

title="title2">2

4

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

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

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

1 $.($('#tt'));

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

1 $.($('#tt').parent());

渲染tt的父节点的所有子孙元素就可以了,个人觉得通过jQuery的parent()方法是最安全不过的了,不管你的javascript输出了什么DOM,直接渲染其父节点就可以保证页面能被正确解析。

(2) 某些组件无法多次解析同一个DOM元素:

如果页面上本身就有tt元素:

1

class="easyui-accordion"

id="tt">

2

页面装载完,你通过脚本向tt元素append两个子DIV,然后解析:

1

$('#tt').append('

title="title2">2

')

title="title1">1

2 $.($('#tt').parent());

不要以为你会得到一个满意的accordion,你什么也得不到,因为页面初始化的时候parser就主动渲染过tt元素,这时候tt已经被parser重构,你再到脚本中append,得到的DOM结构,其实并不是你预想的结果了,所以要避免这种用法。


本文标签: 渲染 页面 自动 解析