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使用unlock.js插件实现滑动解锁
Apr 04 jQuery
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 jQuery
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 jQuery
学习jQuery中的noConflict()用法
Sep 28 jQuery
Jquery实现获取子元素的方法分析
Aug 24 jQuery
jquery 遍历hash操作示例【基于ajax交互】
Oct 12 jQuery
jQuery实现弹幕特效
Nov 29 jQuery
jquery添加div实现消息聊天框
Feb 08 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 批量替换程序的具体实现代码
2013/10/04 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
picChange 图片切换特效的函数代码
2010/05/06 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
js回调函数仿360开机
2019/12/26 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
Python进度条的制作代码实例
2019/08/31 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Spy++的使用方法及下载教程
2021/01/29 Python
品学兼优的大学生自我评价
2013/09/20 职场文书
行政主管职责范本
2014/03/07 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
万里长城导游词
2015/01/30 职场文书
2015年人事科工作总结
2015/04/28 职场文书
2015年教师节主持词
2015/07/03 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python