jqueryEasyui重新渲染
parser,故名意思,就是解析器的意思,别看他只有那么几行代码,jQuery Easyui 能够根据class就能正常渲染页面全靠它了。一般情况下,我们并用不到解析器,本文主要讨论一下,什么情况下会用到它,如何使用。
自动调用parser:
我们之所以在页面中,只要书写相应的class,Easyui就能成功渲染页面,这是因为解析器在默认情况下,会在文档装载完成的时候($(document).ready)被调用一次,而且是渲染整个页面。
手动调用parser:
有些童鞋反映,当页面装载完后,如果用javascript生成的DOM中包含了Easyui支持控件的class,比如说,用javascript生成了以下代码:
<div class="easyui-accordion" id="tt">
<div title="title1">1</div>
<div title="title2">2</div>
</div>
虽然页面上有这样的DOM了,但是没有被渲染为Easyui的accordion插件,原因很简单,Easyui并不会一直监听页面,所以不会主动渲染,这时候就需要手工调用Easyui的parser进行解析了。不过手工调用需要注意以下几点:
(1) 解析目标为指定DOM的所有子孙元素,不包含这个DOM自身:
比如上面代码生成的HTML,id="tt"是我们想要的手风琴DIV,像下面代码去手工解析的话是得不到你想要的结果的:
$.parser.parse($('#tt'));
道理很简单,parser只渲染tt的子孙元素,并不包括tt自身,而它的子孙元素并不包含任何Easyui支持的控件class,所以这个地方就得不到你想要的手风琴效果了,应该这样写:
$.parser.parse($('#tt').parent());
渲染tt的父节点的所有子孙元素就可以了,个人觉得通过jQuery的parent()方法是最安全不过的了,不管你的javascript输出了什么DOM,直接渲染其父节点就可以保证页面能被正确解析。
(2) 某些组件无法多次解析同一个DOM元素:
如果页面上本身就有tt元素:
<div class="easyui-accordion" id="tt">
</div>
页面装载完,你通过脚本向tt元素append两个子DIV,然后解析:
$('#tt').append('<div title="title1">1</div><div title="title2">2</div>')
$.parser.parse($('#tt').parent());
不要以为你会得到一个满意的accordion,你什么也得不到,因为页面初始化的时候parser就主动渲染过tt元素,这时候tt已经被parser重构,你再到脚本中append,得到的DOM结构,其实并不是你预想的结果了,所以要避免这种用法。
最新文章
- 【Win 10 应用开发】InkToolBar——涂鸦如此简单
- showModalDialog打开页面有缓存,不走action
- GDataXMLNode应用
- BZOJ 1036: [ZJOI2008]树的统计Count
- JDBC进行批处理
- 为什么要选择Sublime Text3?
- Spring 使用中的设计模式
- Demo13
- 用Vue.js和Webpack开发Web在线钢琴
- Swift中共有74个内建函数
- Spring配置注解详解
- Linux pmstat命令
- 【Learning】 欧拉回路的求解
- 零基础自学Python十天,写了一款猜数字小游戏,附源码和软件下载链接!
- vue较深入的知识点
- Timeline扩展功能实践指南
- python 变量之小整数池跟大整数池
- exp/expdp 与 imp/impdp命令导入导出数据库详解
- python 离群点检测
- python之继承与派生
热门文章
- mvc架构的简单登录系统,jsp
- 从SQL注入谈数据访问层
- C#之Action和Func的用法(转自 https://www.cnblogs.com/LipeiNet/p/4694225.html)
- Android 对话框黑色边框的解决
- swift内存管理
- Python内置数据结构之字符串str
- 【python爬虫和正则表达式】爬取表格中的的二级链接
- C语言手册-read
- Object-C,NSArraySortTest,数组排序3种方式
- 【codeforces 417D】Cunning Gena