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.validate.js 多个相同name的处理方式
Jul 10 jQuery
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
Feb 27 jQuery
JQuery常见节点操作实例分析
May 15 jQuery
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
May 27 jQuery
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
jQuery/JS监听input输入框值变化实例
Oct 17 jQuery
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 jQuery
jquery插件实现搜索历史
Apr 24 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 加密解密内部算法
2010/04/22 PHP
php 获取全局变量的代码
2011/04/21 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
js模拟微博发布消息
2017/02/23 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
js模块加载方式浅析
2017/08/12 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
python 解析html之BeautifulSoup
2009/07/07 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
python实现Adapter模式实例代码
2018/02/09 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
花卉与景观设计系大学生求职信
2013/10/01 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
早会开场白台词大全
2015/06/01 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript