现在主流的JS框架要数ExtJs和JQuery应用的比较广泛。JQuery属于轻量级的,一般做网站应用比较常见,可见块头小的优势。ExtJs比较庞大,它除了对基本的JS语法和HTML DOM操作方式的封装之外,还提供了一套强大的UI库。在企业级B/S解决方案应用上独占优势。就单说它在原生JS的封装,DOM操作方式封装方面也足以藐视JQuery。下面我就通过对比API,体现两种框架的异曲同工之处。我们已JQuery API为主线,来看看ExtJs是否有替代的方案。
注意一点:ExtJs4.0相对上一版本改动较大,本系列文章暂时只对ExtJs4.0及以上版本提供支持。
JS对HTML节点的操作比较频繁。所以要经常定位和查询DOM元素。我们分别看看两种框架的实现
获取Id="div1"的DOM元素:
[JQuery]
下面是一个完整的比较代码:
[ExtJs]JQuery选择器支持CSS3选择符,ExtJs同样也提供支持,除此之外还支持基本的XPath语法。下面分别讲解:
下面列举的命令是单个形式,都可以无限组合使用。
@ 与引号的使用是可选的。例如:div[@foo='bar'] 也是一个有效的属性选择符。
下面通过几个例子来说明:
/html/body/div/div :从根目录开始找,找到正文的第二层全部DIV。
div/div :在全文匹配DIV元素,并获取包含子DIV的全部子DIV集合。
通俗点讲,他们的作用都是一样的,都是获取元素。但是前者每次调用都会生成一个Ext.Element对象,开辟新的内存空间,而后者共享了一个公用的内存空间,每次调用都会覆盖前一次的信息。由于Ext.Element 比较庞大,后者的好处是可以节省资源。如果你获取的Ext.Element 不需要长期保持重复调用,用后者较为合理。下面通过一个例子来体现他们的区别:
get(el ) :Ext.dom.Element使用了缓存机制来提升获取DOM节点的效率
fly(dom, [named] ) :Ext.dom.Element.Fly使用了JavaScript经典的享元模式来提升效率,从而节约内存,更加低碳化
//这样更新的是div1 var div1 = Ext.get("div1"); var div2 = Ext.get("div2"); div1.update("我想更新div1"); //将get替换成fly后.... //更新的却是div2 var div1 = Ext.fly("div1"); var div2 = Ext.fly("div2"); div1.update("我想更新div1");
我们发现,再次调用Ext.fly后,更新的是DIV2,而再次调用Ext.get不会影响更新的元素。
另外我们在这里再提一下getDom(el ) : Object
它非常适合直接获取页面元素,并返回的就是DOM元素,如果你想操作DOM元素的属性,那这个方法是最好不过的咯。
注意:CSS类操作的几个方法相对于早期版本有变化之前是:e.addClass("c2")
[JQuery][ExtJs]
select(selector, [unique] ) : 返回Ext.CompositeElement(Ext.dom.Element集合)
var e = $("div1");
//设置样式
e.css("width", "550px");
e.css("position", "absolute");
//设置高度
e.height(100);
//获取宽度
e.width();