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动态追加页面数据以及事件委托详解
May 06 jQuery
最常用的jQuery表单验证(简单)
May 23 jQuery
jQuery实现选中行变色效果(实例讲解)
Jul 06 jQuery
jQuery实现广告条滚动效果
Aug 22 jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
jquery animate动画持续运动的实例
Nov 29 jQuery
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
关于jquery中attr()和prop()方法的区别
May 28 jQuery
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
Dec 10 jQuery
jquery分页优化操作实例分析
Aug 23 jQuery
jquery css实现流程进度条
Mar 26 jQuery
jQuery HTML css()方法与css类实例详解
May 20 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处理Oracle的CLOB实例
2014/11/03 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python内置加密模块用法解析
2019/11/25 Python
python 实现二维列表转置
2019/12/02 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
大学生水文观测实习自我鉴定
2013/09/29 职场文书
总经理驾驶员岗位职责
2013/12/04 职场文书
会计人员岗位职责
2014/03/19 职场文书
孔庙导游词
2015/02/04 职场文书
黄河绝恋观后感
2015/06/08 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
app场景下uniapp的扫码记录
2022/07/23 Java/Android