Jquery之美中不足小结


Posted in Javascript onFebruary 16, 2011

是的,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。。。。
说累了,以后再说。

Javascript 相关文章推荐
基于jquery实现的类似百度搜索的输入框自动完成功能
Aug 23 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
js删除Array数组中指定元素的两种方法
Aug 03 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
jQuery选择器之属性过滤选择器详解
Sep 28 jQuery
Angular4学习教程之DOM属性绑定详解
Jan 04 Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
Apr 12 Javascript
vue中data里面的数据相互使用方式
Jun 05 Vue.js
jquery的index方法实现tab效果
Feb 16 #Javascript
jQuery ready函数滥用分析
Feb 16 #Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
Feb 14 #Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 #Javascript
JQuery 选择器、过滤器介绍
Feb 14 #Javascript
AJAX分页的代码(后台asp.net)
Feb 14 #Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 #Javascript
You might like
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
js输出列表实现代码
2010/09/12 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
python三方库之requests的快速上手
2019/03/04 Python
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
2014新年寄语
2014/01/20 职场文书
教师个人剖析材料
2014/02/05 职场文书
大学生创业计划书
2014/08/14 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技