jquery中为什么能用$操作


Posted in jQuery onJune 18, 2019

前言

jq对dom节点的操作相信大家都很熟悉,

$("input").val("value");

直接用$来获取dom节点的方式也非常便捷方便,那么他是怎么实现的呢?

猜想

在没看源码之前,我的猜想是这样的

function Dom(selector){
this.dom = document.querySelector(selector);
this.val = function (content) {
if(content){
this.dom.value = content
}else{
return this.dom.value;
}
}
}
function $(selector) {
return new Dom(selector);
}
$("input").val("value")

$()是一个function,这个function会返回一个new Dom的对象,这个new Dom的对象里写一些方法,就达到jq的这样效果了。

实际

之后看了jq源码的写法,果然不同凡响……

(function(window, undefined) {
jQuery = function(selector, context) {
return new jQuery.fn.init(selector, context);
}
jQuery.fn = jQuery.prototype = {
init: function(selector, context) {
this.dom = document.querySelector(selector)
},
val: function(content) {
if(content) {
this.dom.value = content
} else {
return this.dom.value;
}
}
}
jQuery.fn.init.prototype = jQuery.fn;
window.$ = jQuery;
})(window);
$("input").val("value")

首先,将jq的代码写在一个匿名函数里,这样避免了重复命名对变量的影响,通过window.$ = jQuery;把$挂在windo下,实现域外使用$的操作。

其次,调用jQuery这个方法,return 一个jQuery.fn.init()的对象,jQuery.fn.init()本质上是一个构造函数,这样$("input")的时候其实相当于已经new了一个对象。

但是怎么使用.val()方法呢,现在new出来的对象只有一个dom属性(当然在我这个例子里是这样的)。

所以,最后jQuery.fn.init.prototype = jQuery.fn;这句话格外关键,这句让jQuery.fn.init也能使用val()这个方法,当然也能使用init方法了,

所以$("input").init("select").val("value")这种写法也是正确的,而这种写法的效果就是改变了select的值而没有改变input的值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery EasyUI 组件加上“清除”功能实例详解
Apr 11 jQuery
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
Apr 14 jQuery
jquery中有哪些api jQuery主要API
Nov 20 jQuery
jQuery与vue实现拖动验证码功能
Jan 30 jQuery
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
jQuery实现左右两个列表框的内容相互移动功能示例
Jan 27 jQuery
使用异步controller与jQuery实现卷帘式分页
Jun 18 jQuery
JQuery 实现文件下载的常用方法分析
Oct 29 jQuery
JQuery样式与属性设置方法分析
Dec 07 jQuery
jQuery操作元素的内容和样式完整实例分析
Jan 10 jQuery
JQuery基于FormData异步提交数据文件
Sep 01 jQuery
js/jQuery实现全选效果
Jun 17 #jQuery
jQuery创建折叠式菜单
Jun 15 #jQuery
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 #jQuery
jquery操作checkbox的常用方法总结【附测试源码下载】
Jun 10 #jQuery
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 #jQuery
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 #jQuery
jQuery+ajax实现批量删除功能完整示例
Jun 06 #jQuery
You might like
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
PHP邮件专题
2006/10/09 PHP
PHP网站提速三大“软”招
2006/10/09 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
Vue formData实现图片上传
2019/08/20 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
python中mechanize库的简单使用示例
2014/01/10 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
python求质数列表的例子
2019/11/24 Python
python如何输出反斜杠
2020/06/18 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
小学毕业感言500字
2014/02/28 职场文书
仓库文员岗位职责
2014/04/06 职场文书
品牌转让协议书
2014/08/20 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
趣味运动会广播稿
2014/09/13 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书