Jquery之美中不足小结_jquery

是的,jquery成功挖掘selector、链式用法、gsetter用法、很多精简命名,等等,让前端变得轻松简单,为Web开发作出巨大贡献。
不过,它也有一些不尽人意的地方。

1。关于代码坨之一。

一直觉得jquery是个个人英雄主义的产物,有耐心看完他代码的,绝对少于百分之一。
sizzle独立出来后,ms有些改观。
可一坨一坨并且相互牵连的风格,还是在sizzle与jquery到处都是。
有时想:John如果不写代码了,谁会愿意来接手这些坨坨。

2。关于代码坨之二。

不知有没有组件开发者想过“依赖jquery开发出一个能不依赖jquery而独立运行的组件”?
这是奇怪的需求吗?----好像不是。
有这样的需求吗?----很多同学会说:“jquery已经树大根深好乘凉可依赖,为什么还要独立运行。”
也是,组件开发者的水平一般都还不错,他们会想办法解决这些问题的。如果有这样的需要,他们会去找到对应的方法库的。
不过,这也说明了,jquery不能满足这些人的需求。
因为jquery就是个代码坨。想拆成静态方法库,那几乎是不可能的。

3。关于“专注于dom”之一。

不知道该说好,还是该说不好。
觉得jquery的团队,绝对有能力做一个全面的框架,而不只是停在“专注于dom”这一点上。
使用jquery与jquery组件,我们可能还得自己去找个种子文件,来作异步加载等。
因为这些的种子需求,其实是跟dom没啥紧密关系的,所以jquery可以完全不顾-----倒是很会偷懒啊。
另,关于种子文件,YUI3把use当核心点是个不错的创意,可惜发挥得有点太过。到YUI3后,我想只用他的selector来作个性能比对,竟然要加载一推文件才能做到。

4。关于“专注于dom”之二。
“jquery专注于dom”,
那字符串的trim,需要在jquery里吗?----貌似没必要吧。不过jquery顺手提供了。类似的还有parseJSON、globalEval等。
那字符串模板功能(tmpl)呢?----模板明显是应该基于字符串的,因为字符串模板常用来组织html字符,所以,jquery会把它牵强的放进来。并且是基于dom的。----我实在想说:真的很牵强。
我们在项目中,可能还会用到很多跟字符串有关的功能(trim|subByte|encode4Hhtml等)、跟object有关的功能(get|dump|mix等)、跟数组有关的功能(forEach|map),等等。
这些问题,jquery都没有帮我们解决的意思,那我们是不是都得再另请高明或自已解决?

5。关于sizzle。
A:有时候觉得sizzle是个半成品,一些本来可以顺手提供的功能,却没提供出来。
例如:
selector2filter(selector) //把一个selector转化成一个过滤函数。
filter(els,selector,refEl) //以ref为参考元素,按selector条件过滤els。例如,在delegate时会用到。由于sizzle没提供,导致$('#id').delegate('>li','click',handle)中的'>li'的参考元素不是#id对应的对象
B:sizzle如果想解决以下这两个问题,可能得伤筋动骨了。

复制代码 代码如下:

<h1 id="head1">主题</h1>
<ul><li>明细1.1</li><li>明细1.2</li></ul>
<ul><li>明细2.1</li><li>明细2.2</li></ul>
<script>
alert($('#head1~ul>li').length);//应该是4而不是0。因为sizzle在取候选集时偷懒了,没有认真的处理候选集问题
</script>

复制代码 代码如下:

<ul>
<li>
<div>
<div>
<span>需要的</span>
</div>
</div>
</li>
<li>
<h1>
<div>
<span>不需要的</span>
</div>
</h1>
</li>
</ul>
<script>
alert($('li>div span').length); //应该是1,而不是0。因为sizzle在过滤时偷了懒,把回溯的情况给忽略了。
</script>

C:一点小想法,Sizzle的代码有点多。YUI后有13K之多,去掉他额外加的几个简写,也还有11K多。

6。。。。
说累了,以后再说。

时间: 2024-08-02 15:51:39

Jquery之美中不足小结_jquery的相关文章

jquery常用操作小结_jquery

页面load方法 $().ready(function() { }) div隐藏操作 // div是否隐藏 function isHideMenu(){ return $("#menuContent").is(":hidden") } // 隐藏div mainFrameset.hide(); // 显示div mainFrameset.show(); 获取对象 //通过id获得 $("#menuContent"); //通过class获得 $(

jQuery基础知识小结_jquery

1.基础  jquery对象集:   $():jquery对象集合   获取jquery对象集中的元素:    使用索引获取包装器中的javascript元素:var temp = $('img[alt]')[0]    使用jquery的get方法获取jquery对象集中的javascript元素:var temp = $('img[alt]').get(0)    使用jquery的eq方法获取jquery对象集中的jquery对象元素:     $('img[alt]').eq(0)   

jQuery Selector选择器小结_jquery

//jQuery 选择器 $ //$(expression,[context]) return jQuery //Unit One //expression 之 CSS 定义符 就是以CSS语法表示所要选择的元素 // $("*"); // 表示页面所有元素标签 // $("th, td") // 表示所有<th><td>元素标签 // $("a") // 表示所有<a>元素标签 // $("div#

JQuery基础语法小结_jquery

1.$(document)将document对象转换为jquery 复制代码 代码如下: $(document).ready(function(){     alert("hello world"); }); 2.获取所有的超链接对象,并且增加onclick事件:其实在底层jquery对象获得的每个标签的数组,因此我们不需要进行循环了 复制代码 代码如下: $(document).ready(function(){     $("a").click(function

从JavaScript 到 JQuery (1)学习小结_jquery

这么说吧 , 只有扎实的 JavaScript 功底 ,才能得心应手的使用各种 JS 库 , 然后进入正题吧 ! 1.先谈谈JQuery的效率方面吧 他在选择器的速度上比 标准的 JS Dom 要慢上4倍左右(官方说的,不是我瞎编的...) , 那为什么我们还要使用它呢 ?? 原因很简单, 第一 JS 是应用客户端的 , 速度影响并不那么明显 , 但是一定要注意什么时候用JQuery的选择器 , 什么时候用JavaScript的选择器 ! 我个人是这样理解的 , 如果在选择对象时 , 逻辑比较容

jquery中动态效果小结_jquery

动画效果,如果综合使用,还能使用简单的代码简单实现jquery的各种插件的效果 本文参考<<浅谈jquery>一书,加以整理,并结合自己的实际经验而成,可以看做一个 学习手册吧 编辑的时候代码全乱了,重新整理了下,可能代码格式还是有点乱,请见谅 显示(show),隐藏(hide)与组合(toggle)效果 1.show(speed,callback); 说明:这个方法可以显示隐藏的元素,其中参数也缺省,即写成show()这种形式 speed ---指定显示的速度 有3个参数可以选择 sl

一次失败的jQuery优化尝试小结_jquery

(这并不意味着jQuery的性能是优秀的, 反之只能说它是一个相对封闭的库,无法从外部介入进行优化).这篇文章就记录一次失败的优化经历. 优化思想 这一次优化的思想来自于数据库.在数据库优化的时候,我们常会说"将大量的操作放在一个事务中一起提交,能有效提高效率".虽然对数据库不了解的我并不知道其原因,但是"事务"的思想却为我指明了方向(虽然是错的--). 因此我尝试将"事务"这一概念引入到jQuery中,通过"打开"和&quo

jquery 插件开发方法小结_jquery

jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(object); jQuery.extend(object); jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法. jQuery.fn.extend(object);给jQuery对象添加方法. fn 是什么东西呢.查看jQuery代码,就不难发现. 复制代码 代码如下: jQuery.fn = jQuery.prototype = { init: function( sel

jQuery获取对象简单实现方法小结_jquery

监控一个容器,当用户点击时弹出 代码如下 $(function(){ $("Element").click{function(){ alert("点击我哦!"); } } }); 基本对象获取(注意这里获取的都是Jquery对象而不是Dom对象哦,但是他俩是可以转换滴) 代码如下 复制代码 代码如下: $("*") '表示获取所有对象 但是我至今没这样用过 $("#XXX") '获得 id=XXX 的元素对象(id可以是标签的