`
xzuse
  • 浏览: 43468 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Ext基础一(转载)

    博客分类:
  • Ext
阅读更多

 

要学习及应用好Ext框架,必须需要理解Html DOMExt ElementComponent三者之间的区别。

 

 

每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM对象,动态改变页面的内容,正是通过使用脚本语言来操作DOM对象实现。(通常使用getElementById/Ext.getDOM获得DOM对象)

 

 

仅仅有DOM是不够的,比如要把页面中的某一个节点移到其它位置,要给某一个节点添加阴影效果,要隐藏或显示某一个节点等,我们都需要通过几句 javascript才能完成。因此,Ext在DOM的基础上,创建了Ext Element,可以使用Element来包装任何DOM,Element对象中添加了一系列快捷、简便的实用方法。(通常使用Ext.get获得Element对象)

 

 

对于终端用户来说,仅仅有Element是不够的,比如用户要显示一个表格、要显示一棵树、要显示一个弹出窗口等。因此,除了Element以外,Ext 还建立了一系列的客户端界面组件Component,我们在编程时,只要使用这些组件Componet即可实现相关数据展示及交互等,而 Component是较高层次的抽象,每一个组件在渲染render的时候,都会依次通过Element、DOM来生成最终的页面效果。(通常使用Ext.getCmp获得Component对象)

 


Ext中 getDom、get、getCmp的区别

getDom方法能够得到文档中的DOM节点,该方法中包含一个参数,该参数可以是DOM节点的id、DOM节点对象或DOM节点对应的Ext元素(Element)等。 (与getElementById是一个效果)

Ext.onReady(function()
{var e=new Ext.Element("hello");
Ext.getDom("hello");
Ext.getDom(e);
Ext.getDom(e.dom);
});

 

//Html页面中包含一个id为hello的div,代码如下:<div id="hello">aaa</div>?

在上面的代码中,Ext.getDom("hello")、Ext.getDom(e)、Ext.getDom(e.dom)等三个语句返回都是同一个DOM节点对象。?

?

get方法中只有一个参数,这个参数是混合参数,可以是DOM节点的id、也可以是一个Element、或者是一个DOM节点对象等。 get方法其实是Ext.Element.get的简写形式。?

?

Ext.onReady(function(){
var e=new Ext.Element("hello");?
Ext.get("hello"));
Ext.get(document.getElementById("hello"));
Ext.get(e);
});

 

//Html页面中包含一个id为hello的div,代码如下:<div id="hello">aaa</div>?

Ext.get("hello")、Ext.get(document.getElementById("hello"))、Ext.get(e)等三个方法都可以得到一个与DOM节点hello对应的Ext元素

 

 

getCmp方法用来获得一个Ext组件,也就是一个已经在页面中初始化了的Component或其子类的对象,getCmp方法中只有一个参数,也就是组件的id。 getCmp方法其实是Ext.ComponentMgr.get方法的简写形式。

 

Ext.onReady(function(){
var myPanel=new Ext.Panel({id:“myFirstPanel”,?title:“旧的标题",renderTo:"hello",width:300, height:200?});
Ext.getCmp(" myFirstPanel ").setTitle("新的标题");
});

 

//Html页面中包含一个id为hello的div,代码如下:<div id="hello">aaa</div>

我们使用Ext.getCmp(“myFirstPanel").来得到id为myFirstPanel的组件,并调用其setTitle方法来设置该面板的标题。

 

 

DOM的增删改查

Ext.Element占Ext Core库的篇幅很大,其中方法就占据了大部分。因此我们将这些方法可分为下面几类:

 

DOM查询或遍历(如query、select、findParent)

 

CSS(如setStyle、addClass)

 

DOM操控(如createChild、remove)

 

方位、尺寸(如getHeight、getWidth)

 

 

DOM查询----Ext.query与Ext.select

Ext.query和Ext.select的作用同是根据CSS选择符,基本的XPath,HTML属性等查找出一个或多个元素。区别在于返回类型上。分别是:

query方法返回的是JavaScript标准的数组类型;
select方法返回的是CompositeElement类型,试比较:

 

 

alter(Ext.isArray(Ext.query(‘a.BigClass’))); //true
alter(Ext.query(‘a.BigClass’).length);//里面包含的元素个数

Ext.select('a.BigClass').each(function(i){
i.dom.href = 'javescript:void(0);'// 找到所有带有BigClass样式的A元素修改其链接
});

 

CompositeElement类型属于Ext自定义的类型,简单地说是以一个Ext.Element实例代表集合中多个元素,可实现Element对象上所有的接口,也就是说CompositeElement在Ext中用于表示元素的集合中不论有多少个元素,均被视为一个单独元素处理。

它的用法和单个的Element对象一样。select方法返回的结果可直接如同Element般地操作,一般比query方法常用。

 

 

DOM查询---- DomQuery详解

DomQuery是Ext Core提供的HTML或XML文档选择器,它支持大部分的CSS 3选择器规则,同时提供了一些自定义方式.

DomQuery主要有4种选择方式:元素标记、元素属性、伪对象、 CSS值

1.通过元素标记选择,主要有以下6种方法:
(1)*:选择任何元素。其使用方法请看下面代码。
 Ext.select('*');
(2)E:元素的标记为E。其使用方法请看下面代码。
 Ext.select('div');
(3)E F:选择包含在标记E中的标记F。其使用方法请看下面代码。
 Ext.select('div a');//将选择div下的a元素
(4)E>F:选择包含在标记E中的直接子标记F。其使用方法请看下面代码。
 Ext.select('div>a');//将选择div下的直接子元素a
(5)E+F:选择所有紧接在元素E后的元素F。其使用方法请看下面代码。
 Ext.select('div+a');//将选择紧接在div下的元素a
(6)E~F:选择所有紧接在元素E后的同层元素F。其使用方法请看下面代码。
Ext.select('div~a');//将选择紧接在div下的同层元素a


2.通过元素属性选择,主要有以下7种语法。
(1)E[foo]:选择带有属性foo的元素。其使用语法请看下面代码。
 Ext.select('div[id]');//选择有id属性的div元素
(2)E[foo=bar]:选择foo的属性值为bar的元素。其使用语法请看下面代码。
 Ext.select('input[checked=true]');//选择checked属性值为true的元素
(3)E[foo^=bar]:选择foo的属性值以bar开头的元素。其使用语法请看下面代码。
 Ext.select('input[name^=form1]'); //选择name属性值以form1开头的元素
(4)E[foo$=bar]:选择foo的属性值以bar结尾的元素。其使用语法请看下面代码。
 Ext.select('input[name$=form1]'); //选择name属性值以form1结尾的元素
(5)E[foo*=bar]:选择foo的属性值包含字符串bar的元素。其使用语法请看下面代码。
 Ext.select('input[name*=form1]'); //选择name属性值包含字符串form1的元素
(6)E[foo%=2]:选择foo的属性值能整除2的元素。其使用语法请看下面代码。
 Ext.select('input[value%=2]'); //选择value属性值能整除2的元素
(7)E[foo!=bar]:选择foo的属性值不等于bar的元素。其使用语法请看下面代码。
 Ext.select('input[name!=form1]'); //选择name属性值不等于form1的元素


3.通过伪对象选择,主要有以下18种语法。
(1)Ext.select('ul li:first-child'); //选择所有ul下的第一个li子节点
(2)Ext.select('ul li:last-child'); //选择所有ul下的最后一个li子节点
(3)Ext.select('ul li:nth-child(2)'); //选择所有ul下的第2个li子节点
(4)Ext.select('ul li:nth-child(odd)'); //选择所有ul下的奇数行li子节点
(5)Ext.select('ul li:nth-child(evan)'); //选择所有ul下的偶数行li子节点
(6)Ext.select('ul li:only-child'); //选择所有ul下只有一个子节点的li节点
(7)Ext.select('input:checked');//选择所有checked属性值为true的元素
(8)Ext.select('input:first'); //选择第一个input元素
(9)Ext.select('input:last'); //选择最后一个input元素
(10)E:nth(n):选择匹配的第n(n≥1)个元素E。其使用语法请看下面代码。
 Ext.select('input:nth(2)'); //选择第2个input元素
(11)E:odd:是语法“:nth-child(odd)”的简写。
(12)E:evan:是语法“:nth-child(evan)”的简写。
(13)Ext.select('div:contains(list)'); //选择innerHTML属性包含“list”的div
(14)Ext.select('div:nodeValue(test)'); //选择包含文本节点且值为“test”的div
(15)Ext.select('input:not(:checked)'); //选择不包含checked属性的input
(16)Ext.select('div:has(p)'); //选择包含p的div
(17)Ext.select('div:next(p)'); //选择与包含p的div同层的下一个div
(18)Ext.select('div:prev(p)'); //选择与包含p的div同层的下一个div

 

 

4.通过CSS值进行选择。主要有以下6种语法。
(1)E:{display=none}:选择display值为none的元素E。其使用语法请看下面代码。
Ext.select('div:{display=none}'); //选择display值为none的元素E
(2)Ext.select('div:{display^=none}'); //选择display值以none开始的元素E
(3)Ext.select('div:{display$=none}'); //选择display值以none结尾的元素E
(4)Ext.select('div:{display*=none}'); //选择display值包含字符串none的元素E
(5)Ext.select('div:{display%=none}'); //选择display值整除2的元素E
(6)Ext.select('div:{display!=none}'); //选择display值不等于none的元素E

 

 

Domquery的语法可以单独使用,也可以组合在一起使用,例如以下代码:


Ext.select('div,span'); //选择所有div元素与span元素
//选择class为red,且是第1个子节点,display属性为none的div
Ext.select('div.red:first-child[display=none]');

 


如果没有指定选择器开始搜索的根节点,默认是从body节点开始,这就等于每次都要做全文搜索,其性能可想而知,是相当低效的,因此,建议大家在每次搜索时都指定搜索的根节点,减少搜索范围。设置搜索根节点的语法请看下面代码。

Ext.select('div',true, 'elId'); // elId为根节点id


//下面这句与上面的效果是一样的


Ext.get('elid').select('div');

 

操纵CSS

Ext为我们提供了很多操纵CSS的方法.

addClass轻松地为一个元素添加样式:


Ext.get('elId').addClass('myCls'); // 加入元素的'myCls'的样式


radioClass添加一个或多个className到这个元素,并移除其所有侧边(siblings)节点上的同名样式。


Ext.get('elId').radioClass('myCls');//为元素添加‘myCls’在所有侧边元素上删除‘myCls’样式


removeClass移除元素身上一个或多个的CSS类。


Ext.get('elId').removeClass('myCls'); // 移除元素的样式

 

toggleClass轮换(Toggles,两种状态中转换到一个状态)--添加或移除指定的CSS类(如果已经存在的话便删除,否则就是新增加)。


Ext.get(‘elId’).toggleClass(‘myCls’); // 加入(移除,再加入)样式 Ext.get('elId').toggleClass('myCls');


hasClass检查某个CSS类是否作用于这个元素身上。


If (Ext.get(‘elId’).hasClass(‘myCls’)) {alert(‘是有样式的’);}


replaceClass在这个元素身上替换CSS类。


Ext.get('elId').replaceClass('myClsA', 'myClsB');

 

getStyle返回该元素的统一化当前样式和计算样式。


var color = Ext.get('elId').getStyle('color');
var zIndx = Ext.get('elId').getStyle('z-index');
var fntFmly = Ext.get('elId').getStyle('font-family'); // ... 等等

 


setStyle设置元素的样式,也可以用一个对象参数包含多个样式。
Ext.get('elId').setStyle('color', '#FFFFFF');
Ext.get('elId').setStyle('z-index', 10);
Ext.get('elId').setStyle({ display : 'block', overflow : 'hidden', cursor : 'pointer' });
Ext.get('elId').setStyle('color', '#FFFFFF', true); // 带有动画的变换过程
Ext.get(‘elId’).setStyle(‘color’, ‘#FFFFFF’, {duration: .75}); // 带有0.75秒动画变换过程


getColor为指定的CSS属性返回CSS颜色。RGB、三位数(像#fff)和有效值都被转换到标准六位十六进制的颜色。
Ext.get('elId').getColor('background-color');
Ext.get('elId').getColor('color');
Ext.get('elId').getColor('border-color'); // ... 等等


setOpacity设置元素的透明度。
Ext.get('elId').setOpacity(.5);
Ext.get('elId').setOpacity(.45, true); // 动画
Ext.get('elId').setOpacity(.45, {duration: .5}); // 附有半秒的动画过程
clearOpacity清除这个元素的透明度设置。
Ext.get('elId').clearOpacity();

 


操纵DOM

appendChild 把送入的元素归为这个元素的子元素。
var el = Ext.get('elId1');
Ext.get('elId').appendChild('elId2'); // 'elId2'添加到'elId'里面
Ext.get(‘elId’).appendChild(el); // 参数还可以是:[‘elId2’,‘elId3’],???? el.dom?? ,???? Ext.select(‘div’)

appendTo把这个元素添加到送入的元素里面。
Ext.get('elId').appendTo('elId2');// 'elId'添加到'elId2'里面

Replace 用于当前这个元素替换传入的元素。
Ext.get('elId').replace('elId2'); // 'elId'去替换'elId2‘

replaceWith 用传入的元素替换这个元素
Ext.get('elId').replaceWith('elId2'); // 'elId2'替换掉'elId'.

insertBefore 传入一个元素的参数,将其放置在当前元素之前的位置
Ext.get('elId').insertBefore('elId2');

insertFirst 可以是插入一个元素,也可以是创建一个元素(要创建的话请使用“DomHelper配置项对象”作为参数传入),这个元素将作为当前元素的第一个子元素出现。
 Ext.get(‘elId').insertFirst(el);
 // 用DomHelper配置项创建新节点
 Ext.get('elId').insertFirst({
 tag: 'p',
 cls: 'myCls',
 html: 'Hi I am the new first child'
 });


remove从DOM里面移除当前元素,并从缓存中删除。
Ext.get('elId').remove(); // elId在缓存和dom里面都没有

 

 

操纵DOM- - - -DOMHepler配置项

在上面的例子中,大家可能就注意到这样的语法:
.insertFirst({
tag: 'p',
html: 'Hi I am the new first child'
});
insertFirst方法的那个参数作用是什么呢?参数就是要创建的装饰元素(HTML元素)在DomHelper 中是怎么表示的,也就是DomHelper的配置选项,其配置项支持很多的HTML属性,html片断也行,至于html属性就可以是Dom节点的很多属性了(css class、url、src、id等)。

DomHelper配置可视作任何HTML元素的等价物.

DomHelper是专用于动态生成装饰元素的实用工具,已解决大多数浏览器之间差别的问题,避免了原始操作DOM脚本的麻烦。对于HTML片断与innerHTML的操作, DomHelper经充分考虑并在性能上有足够的优化。

Ext.DomHelper是一个单例,因此无须实例化即可调用其静态方法:
markup, insertHtml , insertBefore , insertAfter , insertFirst , append ,overwrite

例1 :Ext.DomHelper.append('my-div', {tag:?'ul', cls:?'my-class'});
例2 :Ext.DomHelper.insertFirst('my-div', '<p>Hi</p>');

 


尺寸&大小

某个元素在页面上,我们就想获得到其尺寸大小或改变它的尺寸大小。毫无意外下,Ext Core也把这些任务抽象为清晰的API供大家使用。这些都是setter的方法,可传入动画的配置参数,或即就是以个布尔型的true,表示
这是默认的动画。
Ext.get('elId').setHeight(200, true); // 设置高度为200px以默认配置进行动画

// 设置高度为150px以自定义的配置进行动画
Ext.get('elId').setHeight(150, {
duration : .5, // 动画将会持续半秒
callback: function(){ this.update("结束");} // 动画过后改变其内容为“结束”
});

getHeight//返回元素的偏移(offset)高度。
getWidth//返回元素的偏移(offset)宽度。
setHeight//设置元素的高度。
setWidth//设置元素的宽度。
getBorderWidth//返回指定边(side(s))的padding宽度。
getPadding//可以是t, l, r, b或是任何组合。传入lr的参数会得到leftpadding+right padding。
clip//保存当前的溢出(overflow),然后进行裁剪元素的溢出部分 使用unclip()来移除。
unclip//在调用clip()之前,返回原始的裁剪部分(溢出的)

 


定位

通过Ext Core定义的API能快速地采集元素位置的各方面数据,归纳为get的或set的方法,全部浏览器都可通用。类似于上一节的尺寸大小的API,多数的setter方法支持动画效果。可在第二参数中传入动画的配置参数(object-literal configuration object),或即就是以个布尔型的true,
表示这是默认的动画。


set/getX
set/getY
set/getXY
set/getOffsetsTo//返回当前元素与送入元素的距离
var elOffsets = Ext.get('elId').getOffsetsTo(anotherEl);
set/getLeft
set/getRight
set/getTop
set/getBottom
setLocation//无论这个元素如何定位,设置其在页面的坐标位置。

clearPositioning//当文档加载后清除位置并复位到默认

set/getPositioning//返回一个包含CSS定位信息的对象。有用的技巧:连同setPostioning
一起,可在更新执行之前,先做一个快照(snapshot),之后便可恢复该元素

 

分享到:
评论
1 楼 醉梦如虹 2014-08-19  

对初学者来说很好用转载一下收藏,谢谢
http://www.hlwen.com/fenxiang/xinshang/2014-08-19/97.html

相关推荐

    ext基础

    标题中的"ext基础"指的是在计算机编程中,EXT(Extension)通常是指文件扩展名或软件扩展,这在很多编程语言和操作系统中都有所涉及。文件扩展名是文件名的一部分,用于标识文件的类型和用途。例如,".txt"用于纯...

    EXT动态新增一行

    1. **创建基础结构**:首先,你需要定义一个EXT容器,设置其布局为Column Layout,并预定义好列的数量。每个列通常会包含一个或多个组件,如文本框或下拉框。 2. **定义按钮**:创建一个按钮,作为触发新增行的事件...

    ext 3.2 资源,和ext 基础教程

    完整的ext 3.2的版本,可以在examples文件夹下看到效果!完整的ext 基础教程,可以让ext基础开发者跟快的从事前端页面的开发和设计!

    ext js资料 ext基础

    ext 学习资料 ext基础知识,基础教程。

    最新入门级Ext2.0基础教程

    Ext2是专门为Linux设计的一种文件系统,它在Ext(第一扩展文件系统)的基础上进行了大量改进,提供了更好的性能、稳定性和安全性。与早期的文件系统相比,Ext2支持更大的文件和文件系统大小,并引入了更高效的数据...

    (转载)GWT -EXT学习笔记-基础

    ### GWT-EXT基础知识详解 #### 一、GWT与GWT-EXT简介 Google Web Toolkit (GWT) 是一款由Google开发的开源框架,它允许开发者使用Java语言编写前端应用,并将其编译成浏览器可识别的JavaScript和HTML。GWT提供了...

    EasyExt_004_Ext基础架构_基本使用

    EasyExt_004_Ext基础架构_基本使用

    EXT 的一个例子lookup

    深入学习EXT的`lookup`机制,不仅需要理解EXT的基础组件和数据模型,还需要熟悉其事件驱动和MVC架构。通过阅读和分析给定的JavaScript文件,开发者可以更好地理解和实现这样的功能。同时,Google和EXT的官方文档是很...

    ext5第一部分

    【标题】"ext5第一部分"的描述虽然简略,但可以推测这可能是指Linux文件系统EXT5的第一部分内容。EXT5是Linux内核中的一个拟议的文件系统扩展,尚未正式发布,通常我们所说的EXT系列文件系统指的是EXT2、EXT3、EXT4...

    ext教程、ext核心API 、ext中文教程

    在"EXT教程"中,你将学习到EXT的基础知识,包括如何初始化应用、创建组件、布局管理以及如何与其他JavaScript库或后端服务集成。EXT的组件化思想是其核心,通过各种组件如表格(Grid)、面板(Panel)、窗口(Window...

    ext的课件,ppt版,适合有面向对象基础人士

    Ext是一个强大的JavaScript库,专为构建富客户端Ajax应用程序而设计。它以其面向对象的编程模型、丰富的用户界面组件和高效的数据绑定能力而闻名。对于已经具备面向对象编程基础的开发者来说,学习Ext可以帮助他们...

    Gwt-ext学习笔记之基础篇

    ### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....

    ext下载包,ext,ext包,ext下载

    EXT是一个流行的JavaScript库,主要用于构建富互联网应用程序(RIA)。它由Sencha公司开发,提供了丰富的UI组件和数据管理...同时,学习EXT也需要一定的JavaScript基础和时间投入,但一旦掌握,可以大大提高开发效率。

    Windows读取Ext4分区的工具 Ext2Read

    Linux最常用的文件系统类型之一就是EXT系列,包括EXT2、EXT3和EXT4。然而,Windows操作系统默认并不支持直接读取这些格式的分区。这时,就需要借助第三方工具来实现这一目标,例如“Windows读取Ext4分区的工具”——...

    Gwt-Ext基础-中级-进阶

    Gwt-Ext是一种基于Google Web ...通过这个压缩包中的学习资料,你将能够全面地掌握Gwt-Ext,从基础到进阶,逐步成为一名熟练的Gwt-Ext开发者。通过实践这些知识点,你可以构建出功能强大、用户体验优秀的Web应用程序。

    Ext教程ext2-Ext简易教程

    基础的引入包括`ext-all.css`,`ext-base.js`和`ext-all.js`。在引入这些文件之后,你可以利用Ext提供的API和对象来创建交互式的用户界面。 例如,Ext的`Ext.onReady`函数用于确保DOM加载完成后再执行代码,这是...

    Ext官方中文教程(可打包下载)

    EXT简介 Ext 2简述 EXT新手建议 怎么轻松地进入Ext的世界? 从零开始Ext 设置基础页 Javascript中的作用域(scope)是什么?(一) Javascript中的作用域(scope)是什么?(二) Ext源码概述 Ext与RESTful Web Services ...

    EXT dojochina Ext类静态方法.rar

    所有EXT组件都继承自一个基础类,如Ext.Component,通过扩展和组合这些基类来创建特定的UI元素。 2. **静态方法的概念**:静态方法是不属于类的任何实例,而是直接关联到类本身的函数。它们不能访问类的实例属性,...

    ext PPT,EXT 教程,EXT 中文帮助手册,EXT 中文手册,ext_教程(入门到精通),Ext技术程序文档大全.

    EXT,全称EXT JS,是一种基于JavaScript的开源前端框架,专为构建富互联网应用程序(Rich Internet Applications, RIA)设计。EXT提供了丰富的组件库,包括数据管理、用户界面控件和布局管理,使得开发者能够创建...

Global site tag (gtag.js) - Google Analytics