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+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
jQuery查找dom的几种方法效率详解
May 17 jQuery
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
运用jQuery写的验证表单(实例讲解)
Jul 06 jQuery
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
jQuery实现简单日期格式化功能示例
Sep 19 jQuery
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 jQuery
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
Jan 18 jQuery
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
JQuery事件委托原理与用法实例分析
May 13 jQuery
JQuery发送ajax请求时中文乱码问题解决
Nov 14 jQuery
jquery实现广告上下滚动效果
Mar 04 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
php实现快速排序的三种方法分享
2014/03/12 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
Python登录注册验证功能实现
2018/06/18 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
会计与审计毕业生自荐信范文
2013/12/30 职场文书
销售助理岗位职责
2014/02/21 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
销售队伍口号
2014/06/11 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
暑期社会实践证明书
2014/11/17 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
法定代表人免职证明
2015/06/24 职场文书
三八妇女节主持词
2015/07/04 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers