jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
2015-06-09 22:53
1216 查看
转自:http://www.cnblogs.com/sunjie9606/archive/2012/09/13/2683636.html
现象:
AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout" 等
处理方法:
在html片段加载完毕后使用
Js代码
$.parser.parse(context)
即可重新渲染。
实现原理:
首先附上jquery.parser.js的源码
Js代码
(function($){
$.parser = {
auto: true,
plugins:['linkbutton','menu','menubutton','splitbutton','layout',
'tree','window','dialog','datagrid',
'combobox','combotree','numberbox','validatebox',
'calendar','datebox','panel','tabs','accordion'
],
parse: function(context){
if ($.parser.auto){
for(var i=0; i<$.parser.plugins.length; i++){
(function(){
var name = $.parser.plugins[i];
var r = $('.easyui-' + name, context);
if (r.length){
if (r[name]){
r[name]();
} else if (window.easyloader){
easyloader.load(name, function(){
r[name]();
})
}
}
})();
}
}
}
};
$(function(){
$.parser.parse();
});
})(jQuery);
框架默认在页面加载完成后自动使用$.parser.parse()对整个文档进行渲染
Js代码
$.parser.auto //是否自动进行渲染
$.parser.plugins //包含目前EasyUI框架中所有的插件名称
$.parser.parse(context)
//context 为待查找的 DOM 元素集、文档或 jQuery 对象,为空时默认为整个文档
//渲染对象为: class="easyui-pluginName"的元素
当AJAX异步获取了HTML代码之后,这一段代码是包含JQuery EasyUI 的属性和样式的,这时这些属性和样式并不会生效。这里说说解决方案
我们先来了解页面在刷新或打开时JQuery EasyUI都干了些什么:
在加载完HTML的时候,JQuery EasyUI 会找class=“easyui-xxxx”的样式来初始化JQuery EasyUI 控件,搜索JQuery EasyUI 混淆之后的源代码,找到这么一段:
(function(Extra open brace or missing close brace.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<Misplaced &(function(){
if(!window.easyloader&&Extra open brace or missing close brace.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控件。
可以使用$.parser.parse();这个方法进行处理;
例如:
$.parser.parse();
表示对整个页面重新渲染,渲染完就可以看到easyui原来的样式了;
var targetObj = $("<input name='mydate' class='easyui-datebox'>").appendTo("#id");
$.parser.parse(targetObj);
表示重新渲染某个特定的组件。
此测试已经通过,此方法很可靠。
现象:
AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout" 等
处理方法:
在html片段加载完毕后使用
Js代码
$.parser.parse(context)
即可重新渲染。
实现原理:
首先附上jquery.parser.js的源码
Js代码
(function($){
$.parser = {
auto: true,
plugins:['linkbutton','menu','menubutton','splitbutton','layout',
'tree','window','dialog','datagrid',
'combobox','combotree','numberbox','validatebox',
'calendar','datebox','panel','tabs','accordion'
],
parse: function(context){
if ($.parser.auto){
for(var i=0; i<$.parser.plugins.length; i++){
(function(){
var name = $.parser.plugins[i];
var r = $('.easyui-' + name, context);
if (r.length){
if (r[name]){
r[name]();
} else if (window.easyloader){
easyloader.load(name, function(){
r[name]();
})
}
}
})();
}
}
}
};
$(function(){
$.parser.parse();
});
})(jQuery);
框架默认在页面加载完成后自动使用$.parser.parse()对整个文档进行渲染
Js代码
$.parser.auto //是否自动进行渲染
$.parser.plugins //包含目前EasyUI框架中所有的插件名称
$.parser.parse(context)
//context 为待查找的 DOM 元素集、文档或 jQuery 对象,为空时默认为整个文档
//渲染对象为: class="easyui-pluginName"的元素
当AJAX异步获取了HTML代码之后,这一段代码是包含JQuery EasyUI 的属性和样式的,这时这些属性和样式并不会生效。这里说说解决方案
我们先来了解页面在刷新或打开时JQuery EasyUI都干了些什么:
在加载完HTML的时候,JQuery EasyUI 会找class=“easyui-xxxx”的样式来初始化JQuery EasyUI 控件,搜索JQuery EasyUI 混淆之后的源代码,找到这么一段:
(function(Extra open brace or missing close brace.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<Misplaced &(function(){
if(!window.easyloader&&Extra open brace or missing close brace.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控件。
可以使用$.parser.parse();这个方法进行处理;
例如:
$.parser.parse();
表示对整个页面重新渲染,渲染完就可以看到easyui原来的样式了;
var targetObj = $("<input name='mydate' class='easyui-datebox'>").appendTo("#id");
$.parser.parse(targetObj);
表示重新渲染某个特定的组件。
此测试已经通过,此方法很可靠。
相关文章推荐
- 使用jquery的9个误区
- jQuery映射,缓存jQuery对象
- jquery mobile的tap()事件以及jQuery事件的delegate()方法
- jQuery实现当拉动滚动条到底部加载数据
- jQuery Validate验证框架详解
- 使用 jQuery 进行前端验证 -- 1
- 使用.net和jquery实现一对一的网页聊天系统
- jQuery弹出层_点击自身以外地方关闭弹出层
- JQuery学习笔记
- OpenLayers学习笔记6——使用jQuery UI实现查询并标注(功能实现篇)
- 一场由股票提醒助手插件引发的血案——浅入浅出 jquery autocomplete
- jQuery 参考手册 - Ajax
- jQuery Ajax EasyUI周期性更新datagrid的数据
- jquery的三级菜单
- JQueryUi 初始css配置
- 基于jquery的$.ajax async使用
- jQuery.post()函数
- jquery动态生成表单元素
- 基于Jquery UI Dialog 的改写
- 这个jQuery导航菜单怎么样