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 28 jQuery
jQuery实现Select下拉列表进行状态选择功能
Mar 30 jQuery
jQuery 实现双击编辑表格功能
Jun 19 jQuery
jQuery事件_动力节点Java学院整理
Jul 05 jQuery
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
jQuery实现鼠标响应式透明度渐变动画效果示例
Feb 13 jQuery
轻松搞定jQuery+JSONP跨域请求的解决方案
Mar 06 jQuery
通过jquery.cookie.js实现记住用户名、密码登录功能
Jun 20 jQuery
jQuery鼠标滑过横向时间轴样式(代码详解)
Nov 01 jQuery
深入分析jQuery.one() 函数
Jun 03 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分页查询的简单实现代码
2017/03/14 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
2021/02/06 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
PHP实现两种排课方式
2021/06/26 PHP
redis中lua脚本使用教程
2021/11/01 Redis
python运算符之与用户交互
2022/04/13 Python