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,Angular实现登录界面验证码详解
Apr 27 jQuery
jquery实现图片上传前本地预览
Apr 28 jQuery
Jquery EasyUI $.Parser
Jun 02 jQuery
jQuery修改DOM结构_动力节点Java学院整理
Jul 05 jQuery
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
jQuery实现的简单动态添加、删除表格功能示例
Sep 21 jQuery
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
jquery中有哪些api jQuery主要API
Nov 20 jQuery
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
jQuery实现滚动到底部时自动加载更多的方法示例
Feb 18 jQuery
基于jquery实现彩色投票进度条代码解析
Aug 26 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延迟静态绑定
2016/01/26 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
js操作select控件的几种方法
2010/06/02 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
Python 字符串定义
2009/09/25 Python
python获取糗百图片代码实例
2013/12/18 Python
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
联想中国官方商城:Lenovo China
2017/10/18 全球购物
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
个人担保书格式范文
2014/05/12 职场文书
教育教学读书笔记
2015/07/02 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS