jquery选择不存在的元素如何做到不报错的?
刚好这个月在看jquery源码,要回答这个问题,当然要从jquery源码来看了;
在这儿,使用的是jquery 2.0.3的版本源码进行说明;如,我们使用jquery去查找一个页面不存在的元素$('#test')元素,看下源码具体走了哪些;在这儿就不一步一步进行源码分析,只是进行简单说明;
通过下图代码可以看出,调用$('#test')时,会走jquery.fn.init函数;然后我们去看下此函数;
由于函数代码量过多,就不截图;简单说下,此函数会对传入的“selector”进行分类及各种情况处理;而这儿我们就看是id为test情况;首先它会通过下图判断
然后,会通过一个正则“match = rquickExpr.exec( selector );”进行匹配,匹配"#test"结果match如下:
然后会走原生方法document.getElementById方法:
因为页面本来没有此元素,所以会直接返回空(null),最后会走下图代码,返回最终结果由上图代码可知,即使返回结果为空,它也会返回一个jquery对象,里面包含context、selector属性,还有继承的jquery全局方法,结果如下图:所以,如果你即使查找一个没有的元素,它也会返回一个jquery对象,你也可以直接使用对象中所有的jquery全局方法;
上面只是用id的简单的方式,如果是类、标签、css等其他复杂的进行查找时,jquery会根据类型和浏览器的版本不同,使用不同的方式进行查找,但最终返回结果都差不多,而且即使没有,都会返回一个jquery对象;
现在前端还需要jquery吗,占份额大不大?
对于繁琐的原声js来讲 jq犹如神器深入人心. 它简单优雅。随着近年来前段框架指数的增加. 很多人逐渐不再使用那个神器. 甚至有人会说比起vanillaJS JQ该弃用了.对于开发来说 简单开发 速度快 bug少就是目的.那扯了这些有啥用呢 就是看个人及项目然后做权衡.也有很多库框架都依赖jq.就题论题的讲 前端可以不需要任何框架 原声就足以.我个人也依旧使用它,并没有完全弃用.
历史遗留项目,目前还在用jQuery,新业务一般都很少用了,主流都是vue,react。
相对于jQuery,目前主流MVVM框架存在以下优势:
1、数据驱动
写过jQuery的童鞋都知道,在开发前端页面时,一边要处理数据,另外一边要渲染视图,尤其对于功能复杂的模块,处理复杂度会指数式增长。MVVM框架的一大优势就是数据驱动,核心是处理数据,视图通过模板语法和数据进行绑定,可以极大的提升生产力,
2、前后端分离的开发模式
jQuery时代还处于刀耕火种时代,前后端不分离,运行起前端项目,首先需要把后端的环境搭建下,然后起一下Tomcat等服务,才能把整个项目跑起来。现阶段的MVVM前端框架,并不依赖后端服务器,前端可以单独起一个node服务,前端注重展示与交互,后端注重接口服务,可以并行开发,降低前后端的耦合性。
3、繁荣的生态
node的出现,极大的促进前端生态的完善。从打包构建、到前端服务,各类工具应有尽有。现代MVVM框架可以做到,一套代码,三端运行,相对于jQuery,也是一个优势。
任何框架、库的底层,都离不开原生JavaScript,无论是jQuery,还是vue、react,都是时代发展的产物,是用来解决一类问题的。我们要做到的应该是追根溯源,深刻掌握原理。

