现在主流的JS框架要数ExtJs和JQuery应用的比较广泛。JQuery属于轻量级的,一般做网站应用比较常见,可见块头小的优势。ExtJs比较庞大,它除了对基本的JS语法和HTML DOM操作方式的封装之外,还提供了一套强大的UI库。在企业级B/S解决方案应用上独占优势。就单说它在原生JS的封装,DOM操作方式封装方面也足以藐视JQuery。下面我就通过对比API,体现两种框架的异曲同工之处。我们已JQuery API为主线,来看看ExtJs是否有替代的方案。
注意一点:ExtJs4.0相对上一版本改动较大,本系列文章暂时只对ExtJs4.0及以上版本提供支持。
一、选择器
1.上下文选择器对比
JS对HTML节点的操作比较频繁。所以要经常定位和查询DOM元素。我们分别看看两种框架的实现
获取Id="div1"的DOM元素:
[JQuery]
[ExtJs]
其实Ext.get("div1")与$("#div1")还是有区别的,前者只会获取匹配的第一个元素,后者是匹配的元素集合。ExtJs的等价用法如下:
[ExtJs]
下面是一个完整的比较代码:
[ExtJs]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
Ext.get( "div1" );
Ext.fly( "div1" );
Ext.get( "div1" ).dom;
Ext.getDom( "div1" );
Ext.getBody();
Ext.getDoc();
Ext.select( "#div1" );
Ext.select( "div[title='d1']" );
Ext.query( "div[title='d1']" );
|
2.选择器语法简介
JQuery选择器支持CSS3选择符,ExtJs同样也提供支持,除此之外还支持基本的XPath语法。下面分别讲解:
1)CSS3选择符
下面列举的命令是单个形式,都可以无限组合使用。
元素选择符:
任意元素
-
E 一个标签为 E 的元素
-
E F 所有 E 元素的分支元素中含有标签为 F 的元素
-
E > F 或 E/F 所有 E 元素的直系子元素中含有标签为 F 的元素
-
E + F 所有标签为 F 并紧随着标签为 E 的元素之后的元素
-
E ~ F 所有标签为 F 并与标签为 E 的元素是侧边的元素
属性选择符:
@ 与引号的使用是可选的。例如:div[@foo='bar'] 也是一个有效的属性选择符。
-
E[foo] 拥有一个名为 “foo” 的属性
-
E[foo=bar] 拥有一个名为 “foo” 且值为 “bar” 的属性
-
E[foo^=bar] 拥有一个名为 “foo” 且值以 “bar” 开头的属性
-
E[foo$=bar] 拥有一个名为 “foo” 且值以 “bar” 结尾的属性 =bar] 拥有一个名为 “foo” 且值包含字串 “bar” 的属性
-
E[foo%=2] 拥有一个名为 “foo” 且值能够被2整除的属性
-
E[foo!=bar] 拥有一个名为 “foo” 且值不为 “bar” 的属性
伪类:
-
E:first-child E 元素为其父元素的第一个子元素
-
E:last-child E 元素为其父元素的最后一个子元素
-
E:nth-child(n) E 元素为其父元素的第 n 个子元素(由1开始的个数)
-
E:nth-child(odd) E 元素为其父元素的奇数个数的子元素
-
E:nth-child(even) E 元素为其父元素的偶数个数的子元素
-
E:only-child E 元素为其父元素的唯一子元素
-
E:checked E 元素为拥有一个名为“checked”且值为“true”的元素(例如:单选框或复选框)
-
E:first 结果集中第一个 E 元素
-
E:last 结果集中最后一个 E 元素
-
E:nth(n) 结果集中第 n 个 E 元素(由1开始的个数)
-
E:odd :nth-child(odd) 的简写
-
E:even :nth-child(even) 的简写
-
E:contains(foo) E 元素的 innerHTML 属性中包含“foo”字串
-
E:nodeValue(foo) E 元素包含一个 textNode 节点且 nodeValue 等于“foo”
-
E:not(S) 一个与简单选择符 S 不匹配的 E 元素
-
E:has(S) 一个包含与简单选择符 S 相匹配的分支元素的 E 元素
-
E:next(S) 下一个侧边元素为与简单选择符 S 相匹配的 E 元素
-
E:prev(S) 上一个侧边元素为与简单选择符 S 相匹配的 E 元素
CSS 值选择符:
-
E{display=none} css 的“display”属性等于“none”
-
E{display^=none} css 的“display”属性以“none”开始
-
E{display$=none} css 的“display”属性以“none”结尾 =none} css 的“display”属性包含字串“none”
-
E{display%=2} css 的“display”属性能够被2整除
-
E{display!=none} css 的“display”属性不等于“none”
2)XPath语法
下面通过几个例子来说明:
/html/body/div/div :从根目录开始找,找到正文的第二层全部DIV。
div/div :在全文匹配DIV元素,并获取包含子DIV的全部子DIV集合。
3.Ext.get和Ext.fly的区别:
通俗点讲,他们的作用都是一样的,都是获取元素。但是前者每次调用都会生成一个Ext.Element对象,开辟新的内存空间,而后者共享了一个公用的内存空间,每次调用都会覆盖前一次的信息。由于Ext.Element 比较庞大,后者的好处是可以节省资源。如果你获取的Ext.Element 不需要长期保持重复调用,用后者较为合理。下面通过一个例子来体现他们的区别:
1
2
3
4
5
6
7
8
9
10
11
|
var div1 = Ext.get( "div1" );
Ext.get( "div2" );
div1.update( "我想更新div1" );
var div1 = Ext.fly( "div1" );
Ext.fly( "div2" );
div1.update( "我想更新div1" );
|
我们发现,再次调用Ext.fly后,更新的是DIV2,而再次调用Ext.get不会影响更新的元素。
二、属性
注意:CSS类操作的几个方法相对于早期版本有变化之前是:e.addClass("c2")
[JQuery]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
var e = $( "div[title=t1]" );
alert(e.attr( "title" ));
e.attr( "title" , "newTitle" );
e.removeAttr( "title" );
e.addClass( "c2" );
e.removeClass( "c1" );
e.toggleClass( "c2" );
e.hasClass( "c2" );
e.html();
e.html( "<b>更新后的Html</b>" );
e.val();
e.val(150);
|
[ExtJs]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
var e = Ext.select( "div[title=t1]" );
alert(e.first().getAttribute( "title" ));
e.first().set({ "title" : "newTitle" });
e.addCls( "c2" );
e.removeCls( "c1" );
e.toggleCls( "c2" );
e.hasCls( "c2" );
e.first().dom.innerHTML;
e.first().update( "<b>更新后的Html</b>" );
e = Ext.get( "text1" );
e.getValue();
e.set({ value: 150 });
|
四、筛选
[JQuery]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var e = $( ".c1" );
e.eq(1);
e.filter( "div[title=t1]" );
e.parent().is( "#div1" );
e.first();
e.last();
e.prev();
e.next();
var e2 = $( "#div1" );
e2.children().first();
e2.children().last();
|
[ExtJs]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
var e = Ext.select( ".c1" );
e.item(1);
e.filter( "div[title=t1]" );
e = Ext.select( ".c1" );
e.first().parent().is( "#div1" );
e.first();
e.last();
e.item(1).next( "div[title=t2]" );
e.item(1).prev();
var e2 = Ext.get( "div1" );
e2.first();
e2.last();
|
五、文档处理
[JQuery]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
var e = $( "div .c1" );
e.first().append( "<b>新内容</b>" );
e.first().prepend( "<b>新内容</b>" );
e.first().before( "<b>新内容</b>" );
e.first().after( "<b>新内容</b>" );
e.eq(2).wrap( "<p></p>" );
e.eq(2).unwrap();
e.eq(2).replaceWith( "<b>被替换的</b>" );
e.eq(3).remove();
e.eq(0).empty();
|
[ExtJs]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
var e = Ext.select( "div .c1" );
e.first().insertHtml( "afterBegin" , "<b>新内容</b>" );
e.first().insertHtml( "beforeEnd" , "<b>新内容</b>" );
e.first().insertHtml( "beforeBegin" , "<b>新内容</b>" );
e.first().insertHtml( "afterEnd" , "<b>新内容</b>" );
e.wrap({
tag: 'p'
});
e.replaceElement(4, "text1" , true );
e.first().replace( "div2" , true );
e.first().remove();
e.removeElement(2, true );
|
六、CSS
[JQuery]
1
2
3
4
5
6
7
8
9
|
var e = $( "div1" );
e.css( "width" , "550px" );
e.css( "position" , "absolute" );
e.height(100);
e.width();
|
[ExtJs]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
var e = Ext.get( "div1" );
e.setStyle( "width" , "550px" );
e.applyStyles({
height: "500px" ,
color: "red" ,
position: "absolute"
});
e.setHeight(100, true );
e.setLeft( "50px" );
e.setTop( "10px" );
e.setLeftTop( "100px" , "50px" );
e.setSize( "100px" , "200px" );
e.setXY([10, 10]);
e.getWidth();
e.getXY();
|
七、事件
[JQuery]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var e = $( "#div1" );
var clickhandler = function () {
alert( "click事件被触发!" );
};
e.bind( "click" , clickhandler);
e.trigger( "click" );
e.unbind( "click" , clickhandler);
e.hover( function () {
e.css( "background-color" , "Red" );
}, function () {
e.css( "background-color" , "Aqua" );
});
|
[ExtJs]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
var e = Ext.get( "div1" );
var clickhandler = function () {
Ext.Msg.alert( "消息" , "click事件被触发!" );
};
e.on( "click" , clickhandler);
e.un( "click" , clickhandler);
e.hover( function () {
e.setStyle( "background-color" , "Red" );
}, function () {
e.setStyle( "background-color" , "Aqua" );
});
|
分享到:
相关推荐
ExtJS4学习笔记(九)---ExtJS4 EditGrid(可编辑的Grid) ExtJS4学习笔记(二)---HBox的使用 ExtJS4学习笔记(五)---Grid分页 ExtJS4学习笔记(八)---Grid多选 全选 ExtJS4学习笔记(六)---多表头Grid ExtJS4学习笔记(十)--...
**第一章 ExtJs大比拼JQuery:Dom文档操作** 1. **选择器**:ExtJs提供了丰富的选择器,类似于jQuery,可以方便地选取DOM元素,如ID选择器、类选择器、属性选择器等。 2. **属性**:不仅包括基本的属性读写,还支持...
EXTJS4的学习文档旨在帮助开发者掌握这一框架,尤其对于初学者来说,提供了宝贵的资源。文档中包含了从环境配置到实际应用开发的基础步骤。 首先,学习EXTJS4的第一步是获取EXTJS的开发资源。EXTJS的下载地址是...
这个中文文档是EXTJS4的官方文档翻译版,为开发者提供了详细的API参考和教程,帮助理解EXTJS4的各种组件、功能和工作原理。 EXTJS4的核心特性包括: 1. **组件化**:EXTJS4引入了基于MVC(Model-View-Controller)...
1. `adapter`:这部分包含了适配器,用于将EXTJS与不同的底层库(如Prototype、jQuery或YUI)集成,使得EXTJS能够支持这些库的功能。 2. `build`:这个目录下存储的是经过压缩的EXTJS完整源码,适合在生产环境中...
xtjs4,创建Ext组件有了新的方式,就是Ext.create(....),而且可以使用动态加载JS的方式来加快组件的渲染,我们再也不必一次加载已经达到1MB的ext-all.js了,本文介绍如何在EXTJS4中创建一个window。 共:10 小节, ...
ExtJS学习笔记.docExtJS学习笔记.docExtJS学习笔记.docExtJS学习笔记.doc
ExtJS4 已完全重新写 grid 组件,tree 也被更新,所以从版本 3 到 4 大部分的属性改变了。 在 ExtJS4 中,API 也发生了很大的变化,包括 tree、tab panel、grid、window、form、chart、data stores、border layout ...
ExtJS资料笔记(extjs各个属性的详解) ExtJS资料笔记(extjs各个属性的详解) ExtJS资料笔记(extjs各个属性的详解)
Extjs4框架在组件创建和布局管理方面做了改进,比如在布局(layout)和区域(region)的使用方面,如果不熟悉API和相关文档,可能会在使用中遇到错误。作者强调使用Extjs4的动态加载功能来加载JS文件和CSS样式,避免...
1. **ExtJS实用开发指南**:此部分主要针对ExtJS的实际应用,包含如何快速上手、组件的使用、布局管理、数据绑定和Ajax交互等内容。开发者可以从中了解到如何创建基本的页面结构,使用GridPanel展示数据,以及通过...
### Extjs4_API文档整理——深入理解类系统与编码规范 #### 一、概述:类系统的重要性 在《Extjs4_API文档整理.pdf》中,文档着重介绍了ExtJS4的类系统及其重要性。作为一款功能强大的前端框架,ExtJS4在版本升级...
1. **页面加载与DOM操作**: 使用jQuery进行页面加载优化和DOM元素操作,然后用Ext JS构建复杂的用户界面和应用逻辑。 2. **Ajax增强**: jQuery的Ajax功能可以用于向后台发送请求,而Ext JS则负责处理和展示返回的...
### 构建与掌握ExtJS4:初学者的详尽指南 #### 一、了解ExtJS4 ExtJS4是一款强大的、开源的JavaScript框架,专为构建交互式、高性能的Web应用程序而设计。它提供了丰富的组件库,如表格、树、菜单、窗口等,以及...
### Extjs 5 学习笔记之 SenchaCmd 深入解析 #### 一、SenchaCmd 的简介 SenchaCmd 是一个跨平台的命令行工具,它为基于 ExtJS 和 Sencha Touch 应用程序的开发周期提供了全面的支持。从创建应用程序的基础结构到...
【EXTJS 4 开发笔记】系列主要针对初学者,详细介绍了如何使用EXTJS 4进行项目开发,尤其是采用MVC模式。EXTJS 4是一个强大的JavaScript库,用于构建富客户端应用程序,MVC模式则是其推荐的开发架构,有助于代码组织...
1. ExtJs 结构树 2 2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 8. Ext.data.JsonReader篇二 15 9. Ext.data.HttpProxy...
本篇笔记将深入探讨ExtJS的事件处理,包括事件登记、事件对象、this的作用域以及ExtJS特有的事件管理方式。 1. **事件登记**: - **内联式登记**:在HTML元素中直接定义事件处理函数,如`onClick="popUp()"`。这种...
ExtJS是一款功能丰富的JavaScript框架,以其强大的组件化和数据绑定机制著名,而jQuery则是一个轻量级的选择器引擎,广泛用于简化DOM操作。这个jQuery ComboBox是开发者为了在不使用ExtJS完整库的情况下,实现类似...