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实现全选、全不选以及单选功能
Mar 23 jQuery
jQuery事件对象的属性和方法详解
Sep 09 jQuery
JQuery 选择器、DOM节点操作练习实例
Sep 28 jQuery
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
jQuery实现弹窗下底部页面禁止滑动效果
Dec 19 jQuery
关于jquery layui弹出层的使用方法
Apr 21 jQuery
jquery实现动态添加附件功能
Oct 23 jQuery
jQuery实现的点击图片居中放大缩小功能示例
Jan 16 jQuery
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
jquery传参及获取方式(两种方式)
Feb 13 jQuery
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
jQuery实现全选按钮
Jan 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
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
微信access_token的获取开发示例
2015/04/16 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
PyTorch实现AlexNet示例
2020/01/14 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
心理健康日活动总结
2014/05/08 职场文书
留学经费担保书
2014/05/12 职场文书
环保标语口号
2014/06/13 职场文书
应用外语系自荐信
2014/06/26 职场文书
教师节学生演讲稿
2014/09/03 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
党支部工作总结2015
2015/04/01 职场文书
学校开除通知书
2015/04/25 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
2015年国庆节寄语
2015/08/17 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书