ExtJs和JQuery应用的比较

现在主流的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]


1

$("#div1");

[ExtJs]


1

Ext.get("div1");

其实Ext.get("div1")与$("#div1")还是有区别的,前者只会获取匹配的第一个元素,后者是匹配的元素集合。ExtJs的等价用法如下:

[ExtJs]


1

Ext.select("#div1");

下面是一个完整的比较代码:

[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.Element类 :是ExtJs对dom对象的封装

//Ext.CompositeElement类:是ExtJs对dom对象集合的封装

//查询Id=div1的元素,返回第一个匹配元素的Ext.Element类型

//该方法只能查Id,不支持选择器

Ext.get("div1");

//功能同上

Ext.fly("div1");

//查询Id=div1的元素的dom对象

Ext.get("div1").dom;

//或者

Ext.getDom("div1");

//获取body元素的Ext.Element类型

Ext.getBody();

//返回当前HTML文档的Ext.Element类型

Ext.getDoc();

//查询Id=div1的元素,返回满足条件的集合Ext.CompositeElement类型

Ext.select("#div1");

//查询属性title=d1的div,返回满足条件的集合Ext.CompositeElement类型

Ext.select("div[title=‘d1‘]");

//查询属性title=d1的div,返回满足条件的dom节点集合

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

//这样更新的是div1

var div1 = Ext.get("div1");

Ext.get("div2");

div1.update("我想更新div1");

//将get替换成fly后....

//更新的却是div2

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]");

//返回第一个匹配元素的title属性

alert(e.attr("title"));

//设置第一个匹配元素的title属性

e.attr("title""newTitle");

//移除第一个匹配元素的title属性

e.removeAttr("title");

//CSS类

//给第一个匹配元素添加c2样式

e.addClass("c2");

//移除

e.removeClass("c1");

//轮回

e.toggleClass("c2");

//检查c2样式是否存在

e.hasClass("c2");

//Html

//获取Html

e.html();

//更新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]");

//属性

//返回第一个匹配元素的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: 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);

//再次筛选,属性title=t1的div

e.filter("div[title=t1]");

//父节点Id=div1时返回true

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);

//再次筛选,属性title=t1的div,集合中不满足条件的元素自动移去

e.filter("div[title=t1]");

e = Ext.select(".c1");

//父节点Id=div1时返回true

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元素结束之前插入

e.first().append("<b>新内容</b>");

//e元素开始之后插入

e.first().prepend("<b>新内容</b>");

//e元素开始之前插入

e.first().before("<b>新内容</b>");

//e元素结束之后插入

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();

//清空标签内的html

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的四个位置插入html:

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‘

});

//用text1替换集合第五个元素

e.replaceElement(4, "text1"true);

//替换用当前元素去替换掉div2标签

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");

//设置xy坐标

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");

//事件绑定

//给元素绑定click事件:

var clickhandler = function () {

    alert("click事件被触发!");

};

e.bind("click", clickhandler);

//模拟click事件:

e.trigger("click");

//解除绑定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");

//事件绑定

//给元素绑定click事件:

var clickhandler = function () {

    Ext.Msg.alert("消息""click事件被触发!");

};

e.on("click", clickhandler);

//解除绑定click事件

e.un("click", clickhandler);

//事件切换

e.hover(function () {

    e.setStyle("background-color""Red");

}, function () {

    e.setStyle("background-color""Aqua");

});

时间: 2024-10-05 13:24:17

ExtJs和JQuery应用的比较的相关文章

ExtJS与JQuery对比

首先分别介绍一下ExtJS和JQuery,然后进行对比分析 一.什么是ExtJS? 1.ExtJS可以用来开发RIA也即富客户端的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架.因此,可以把ExtJS用在.Net.Java.Php等各种开发语言开发的应用中.ExtJs最开始基于YUI技术,由开发人员JackSlocum开发,通过参考JavaSwing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常处理,

ExtJS与jQuery的一点细节上的对比

首先说明这不是一篇完整解读ExtJS和jQuery所有方面差异的文章,只是针对我个人刚看了两天的jQuery产生的一些疑问的整理.之前用过一段时间ExtJS,了解ExtJS的一些机制.现在做移动开发,又选定了jquery mobile,要写控件,所以需要了解jquery.(不过换工作之后应该不会再用jQuery了,坑估计是短期内填不上了) 1.jQuery是个什么东西?Ext是什么东西?(此处不是指两个框架,而是指我们在写程序的时候,经常用到的两个关键字--暂时称之为关键字) 之前用的是ExtJ

ExtJS与JQuery对照

首先在介绍ExtJS和JQuery,然后进行比较 一个.什么是ExtJS? 1.ExtJS能够用来开发RIA也即富client的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架.因此.能够把ExtJS用在.Net.Java.Php等各种开发语言开发的应用中. ExtJs最開始基于YUI技术.由开发者JackSlocum开发.通过參考JavaSwing等机制来组织可视化组件,不管从UI界面上CSS样式的应用,到数据解析上的异常处理,都

ExtJS以及JQuery异步请求Session过期解决方案

最近在开发中遇到这样的问题,当Session过期后,通过拦截器判断过期并通过response.sendRedirect(request.getServletContext()+"/login.jsp")重定位到登录界面,但是因为大部分前后台的交互是通过Ajax进行的异步请求,这种做法只能是该请求没有任何的实际相应,但是不能重定位到登录界面. 然后就想能不能对异步请求,在其返回的时候进行统一的前端拦截,判断如果responseText符合{timeout: true, redirectU

JQuery 学习总结及实例 !! (转载)

出自 new:http://www.jianshu.com/users/1967b163cb61/latest_articles 1.JQuery简介 普通JavaScript的缺点:每种控件的操作方式不统一,不同浏览器下有区别,要编写跨浏览器的程序非常麻烦.因此出现了很多对JavaScript的封装库,比如Prototype.Dojo.ExtJS.JQuery等,这些库对JavaScript进行了封装,简化了开发.这些库是对JavaScript的封装,也就是咱们调用JQuery的一句函数,JQ

集成 extjs 和 highcharts

highcharts 库的画图效果比 ExtJS 好,但 ExtJS 拥有强大的类管理.两者都很不错. 通常在商业项目上,尽量只选择一个库,以减少成本.但如果只是用于非盈利项目上,那么,可以把两者结合起来,既可以用到 extjs 强大的类管理,又可以用到 highcharts 强大的图像功能.各取两者的优势,也是一种不错的使用办法哦. 利用了 extjs panel 的标题,又使用了 highchart 的画图 1 导入库 如下代码所示:具体就是引用 extjs,jquery, highchar

从零开始学习jQuery (一) 开天辟地入门篇

原文:从零开始学习jQuery (一) 开天辟地入门篇 本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 从零开始学习jQuery (五) 事件与事件对象 从零开始学习jQuery (六) jQuery中的Ajax 从零开始学习jQuery (七) jQuery动画-让页面动起来! 从零开始学习jQuer

如鹏网 静态Web开发 第五章:JQuery

课前说明 参考书:<锋利的jQuery> jQuery官网:http://jquery.com jQuery在线API:http://api.jquery.com http://api.jquery.com/api/ (xml文件.) jQuery UI:http://jqueryui.com/ ------------------------------------------- 常见的JavaScript框架库 什么是JavaScript框架库? 普通JavaScript的缺点:每种控件的

Jquery 技术小结

前记: 现在项目中经常要用到JS去操作一些事,对整个团队开发来说,JS的书写规范和正确对开发具有较大的帮助.在一个团队中常常会发生JS书写的不统一性和游览器不兼容性等情况发生.我觉的最好的方法就是有一个统一的书写规范和一个具有良好的兼容性和扩展性的JS库作为我们开发的基层,以提高我们团队的开发速度和各项性能. 对于我本人来说,从一开始的直接写Javascript方法到使用ExtJS 还有 Jquery类库,感触到以下几点: 1.  必须要有良好的JS基础,多多写基础的Javascript方法: