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 相关文章推荐
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
Jun 13 jQuery
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
bootstrap可编辑下拉框jquery.editable-select
Oct 12 jQuery
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
Oct 19 jQuery
jQuery代码优化方法总结
Jan 29 jQuery
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
jQuery中的类名选择器(.class)用法简单示例
May 14 jQuery
jQuery实现常见的隐藏与展示列表效果示例
Jun 04 jQuery
jQuery表单元素过滤选择器用法实例分析
Feb 20 jQuery
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
Sep 10 jQuery
JQuery样式与属性设置方法分析
Dec 07 jQuery
Jquery $.map使用方法实例详解
Sep 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里的中文变量说明
2011/07/23 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
element中的$confirm的使用
2020/04/26 Javascript
python绘图方法实例入门
2015/05/19 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
python计算两个地址之间的距离方法
2018/06/09 Python
python获取交互式ssh shell的方法
2019/02/14 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
预备党员入党思想汇报
2014/01/04 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
工作疏忽检讨书
2014/01/25 职场文书
个性与发展自我评价
2014/02/11 职场文书
财产公证书格式
2014/04/10 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
考试诚信承诺书
2014/05/23 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
招商引资工作汇报
2014/10/28 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript