概述

  ExtJs是另外一种操作封装JavaScript的类库与Jquery同类。所以对Dom的操作也是支持的,比如修改Div内Html内容等操作。有几个问题需要思考下:

  1、ExtJs也支持IFrame的操作,可是如何才能访问IFrame外部Parent的Extjs对象那?

  2、在ExtJs中,我们能够通过TreePanel作为导航菜单,可是TreePanel的Root节点在合并和展开的两种状态展现出来的图标却是不一样,如何设置展开和合并时候图标一致性?

  其实ExtJs通过简单的设置就能够解决上面存在的问题。

ExtJs操作DOM

  ExtJs提供Ext.Element 、Ext.DomHelper、Ext.DomQuery三个类库来完成对DOM的操作。

  1、Ext.Element

  Ext.Element.get()快捷方式Ext.get('元素ID'),只能以dom的id作为参数去获取Ext.Element对象。在Ext中所有组件都是有Id的,这个Id可以是手动指定,也可以是Ext的Id生成机制自动生成。

  2、Ext.DomHelper

  Ext.DomHelper主要是操作dom,对指定的id的dom对象修改Html内容。常用的方法实现追加、插入和重新元素HTML内容功能  


Ext.DomHelper.append(元素id,'html内容’);

Ext.DomHelper.append(元素id,{tag:ul,children:[{tag:li,html:'一个ul列表的第一项'},{...}]});

Ext.DomHelper.insertHtml(位置参数,dom,'html内容');
//dom对象可以通过Ext.get(元素id)获取,位置参数:beforeBegin、afterBegin、beforeEnd、afterEnd;

Ext.DomHelper.overwrite(元素id,'html内容');
//重新元素内Html内容,相当于原生的 .innerHtml="";所以是重写容器中的内容。

var tpl = Ext.DomHelper.createTemplate("<li>{parameter}</li>");
tpl.overwrite(domID,{parameter:'参数值1'})

  3、Ext.DomQuery

  Ext.DomQuery也是获取DOM对象,Ext.query() 是Ext.DomQuery.select()的快捷方式,常用的方法满足dom查询


Ext.query('div')//根据表情获取Dom

Ext.query('[id="domId"]')//通过ID获取Dom

Ext.query('div:first-child')//通过伪类获取DOM,支持绝大部分的CSS3选择器

  4、ExtJs操作Dom及CSS补充

  ExtJs操作Dom方式也有很多种,下面简单做个补充。select获取dom,ExtJs中Fly和get获取Dom对象是有区别的,get采用缓存而Fly却采用享元模式。Ext.get('元素id')和Ext.getCmp('元素id')区别在于get获取页面已存在对应id的标签,而getCmp获取的是id对应ExtJs对象。


//查询Id=div1的元素,返回满足条件的集合Ext.CompositeElement类型
Ext.select("#div1");
//查询属性title=d1的div,返回满足条件的集合Ext.CompositeElement类型
Ext.select("div[title='d1']");

get(el):Ext.dom.Element使用了缓存机制来提升获取DOM节点的效率
fly(dom, [named]):Ext.dom.Element.Fly使用了JavaScript经典的享元模式来提升效率,从而节约内存,更加低碳化

  ExtJs操作css和属性

    var e = Ext.select("div[title=t1]");
//属性操作
//返回第一个匹配元素的title属性
alert(e.first().getAttribute("title")); //设置第一个匹配元素的title属性
e.first().set({ "title": "newTitle" }); //CSS类操作
//给第一个匹配元素添加c2样式
e.addCls("c2"); //移除
e.removeCls("c1"); //轮回
e.toggleCls("c2"); //检查c2样式是否存在
e.hasCls("c2"); //Html
//获取Html
e.first().dom.innerHTML; //更新Html
e.first().update("<b>更新后的Html</b>"); //值
e = Ext.get("text1");
e.getValue();
e.set({ value: });

IFrame操作分类的ExtJs对象

  A页面Html嵌套在另外B页面的IFrame里面时候,A页面的Js如何才能调用B页面ExtJs对象那?其实研究之后,你会发现只需要加上下面一句话就可。

var pdom=window.parent.Ext.getCmp('元素id');

TreePanel中设置父节点展开和收起图标

  TreePanel默认情况下拥有Child的Parent节点在展开和收起的情况下所展示的按钮图标样式是不一致的,如何才能设置图标样式一直那,其实针对ExtJs5.0以后的版本只需要设置如下CSS即可。

  1、先设置图标样式

    .iconbg1  {
background-image:url(/Resource/Images/menu/group_gear.png);
background-repeat:no-repeat;
}
.x-grid-tree-node-expanded .iconbg1
{
/* the icon */
background-image:url(/Resource/Images/menu/group_gear.png);
background-repeat:no-repeat;
}
.iconbg1_1 {
background-image:url(/Resource/Images/menu/cog.png);
background-repeat:no-repeat;
}

  2、设置ExtJs中TreePanel的iconCls属性值

[
{
"Id": ,
"iconCls": "iconinsysmgr",
"Mname": "系统工具",
"url": "",
"children": [
{
"Id": ,
"iconCls": "iconinsysmgr_1",
"Mname": "清理缓存配置",
"ParentmenuID": "",
"url": "/Tool/Index/",
"leaf": "true"
}
]
}
]

TabPanel设置右键关闭菜单项

  TabPanel是Tab的页面集合,在ExtJs中,主要可以用来展现每个菜单的导航页面,在Tab内嵌套IFrame框架,实现页面的导航和跳转,可是当一个页面打开多个Tab的时候,就需要在Tab页面添加一个右键关闭菜单项,能够关闭其他页面、当期页面和所有页面内容,显示效果如图:

实现右键菜单需要借助ExtJs对应的Ext.ux.TabCloseMenu这个控件,实现的方式:

1、添加引用Ext.ux.TabCloseMenu对应的js,位于Extjs->ux目录下;

2、编写页面JavaScript代码块:

    var tabpanel = Ext.create('Ext.TabPanel', {
region: 'center',
deferredRender: false,
activeTab: ,
resizeTabs: true,
minTabWidth: ,
tabWidth: ,
enableTabScroll: true,
plugins: Ext.create('Ext.ux.TabCloseMenu', {
closeTabText: '关闭标签',
closeOthersTabsText: '关闭其他标签'',
closeAllTabsText: '关闭所有标签''
}),
items: [
{ title: "首页", html: "<iframe scrolling='auto' frameborder='0' width='100%' height='100' src='../Default/Welcome'></iframe>" }
]
});

参考文档

  1、ExtJsDom操作 http://blog.csdn.net/lovesomnus/article/details/38687711?utm_source=tuicool

  2、Extjs Dom操作的几个类 http://www.cnblogs.com/youring2/p/3962764.html

ExtJs基础知识总结:Dom、IFrame和TreePanel、TabPanel(三)的更多相关文章

  1. ExtJS基础知识总结:常用控件使用方式(一)

    概述 最近一直在做相关ExtJs方面的项目,遇到了ExtJs使用方面的一系列问题,现在将使用技巧做个记录汇总,以便于下次能够快速使用.以下都是ExtJs控件的常用方法,做简单汇总,俗话说,好记星不如烂 ...

  2. 【基础知识】Dom基础

    [学习日记]Dom基础 1.   内容:使用JavaScript操作Dom进行DHTML开发 2.   目标:能共使用JavaScript操作Dom实现常见的DHTML效果 3.   DHTML= C ...

  3. ExtJs基础知识总结:自定义弹窗和ComboBox自动联想加载(四)

    概述 Extjs弹窗可以分为消息弹窗.对话框,这些弹窗的方式ExtJs自带的Ext.Msg.alert就已经可以满足简单消息提示,但是相对复杂的提示,比如如何将Ext.grid.Panel的控件显示嵌 ...

  4. ExtJS基础知识总结:自定义日历和ComboBox控件(二)

    概述 1.ExtJS 5不支持日期选择框中只选择年月,为了满足ExtJs5可以实现选择年月的功能,查询网上资料,整理出来了相应的处理方式,最终实现的效果如下图: 2.ExtJS 控件丰富,如果需要实现 ...

  5. JavaScript基础知识(DOM)

    获取元素的方法 要操作谁,就要先获取谁: 获取元素 1.document.getElementById:通过ID名来获取元素 兼容性: 在IE8以下,会默认把name属性当做id来获取: docume ...

  6. Java基础知识强化05:不借助第三个变量实现两个变量互换

    1. 不借助第三个变量实现两个变量互换 代码如下: package himi.hebao; /** * 不借助第三个变量实现,两个变量互换 * 这里利用^异或实现两个变量的互换 * @author A ...

  7. CSS基础知识总结之css样式引用的三种方式

    在html中增加css样式有三种: 1.在标签中增加style属性: <!DOCTYPE html> <html lang="en" xmlns="ht ...

  8. HTML DOM基础知识

    HTML DOM基础知识 一.什么是DOM? 1.HTML DOM 定义了访问和操作HTML文档的标准方法. 2.HTML DOM 把 HTML 文档呈现为带有元素.属性和文本的树结构(节点树). 3 ...

  9. day29—JavaScript中DOM的基础知识应用

    转行学开发,代码100天——2018-04-14 JavaScript中DOM操作基础知识即对DOM元素进行增删改操作.主要表现与HTML元素的操作,以及对CSS样式的操作.其主要应用知识如下图: 通 ...

随机推荐

  1. 一些不太常见但很有用的java类

    java.util.concurrent.CopyOnWriteArrayList CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性.所以如果你希望写入的的数据,马上能读到 ...

  2. phpmyadmin #1045 - Access denied for user 'root'@'localhost' (using password: NO)

    phpmyadmin访问遇到1045问题 #1045 - Access denied for user 'root'@'localhost' (using password: NO) 解决办法 找到p ...

  3. 如何解决inline和linline-block在浏览器中的间距问题

    写页面时,如果想要元素从左到右排列,但又不想使用浮动,那么很多人都会用到display:inline或者display:inline-block. 但是每次一用到这个两个属性,浏览器中浏览的时候就会有 ...

  4. 无法对 索引 'IndexName' 执行 删除,因为它不存在,或者您没有所需的权限。

    先写结论: 语法:  DROP INDEX 表名.索引名 如果索引明明存在..却报标题上那个错..请直接去看是否是表名与库中的不一样.. 请一定去检查一下..别问我为什么这么说.. if exists ...

  5. Java集合之LinkedHashMap

    一.初识LinkedHashMap 上篇文章讲了HashMap.HashMap是一种非常常见.非常有用的集合,但在多线程情况下使用不当会有线程安全问题. 大多数情况下,只要不涉及线程安全问题,Map基 ...

  6. 简单的RPC原型与实现原理

    存在的问题 客户端硬编码服务端的地址 引入注册中心,方便服务的注册与发现 注册中心记录的信息:服务地址列表&服务节点权重 Zookeeper节点类型 临时节点:客户端.. 服务注销: tomc ...

  7. react+react-router+webpack+express+nodejs

    react+react-router+webpack+express+nodejs   做SinglePageApplication 支持热加载+ES6 有开发模式和发布模式 https://gith ...

  8. lcok-free简易实现

    lock-free是一种基于原子变量类来构建的非阻塞同步算法. 比较并交换(compare-and-swap) 我们经常会先检查某项东西,然后对其进行修改,如if(X...) {X=...}.这种行为 ...

  9. Python绘图

    1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import numpy as np import matplotlib as mpl import mat ...

  10. centos7 编译php56

    编译安装php5.6 centos7环境 步骤: //下载php5.6 wget http://cn2.php.net/distributions/php-5.6.26.tar.bz2 //安装依赖 ...