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滚动插件scrollable.js用法分析
May 25 jQuery
React中jquery引用的实现方法
Sep 12 jQuery
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
jQuery发请求传输中文参数乱码问题的解决方案
May 22 jQuery
jQuery实现常见的隐藏与展示列表效果示例
Jun 04 jQuery
jquery获取select选中值的文本,并赋值给另一个输入框的方法
Aug 21 jQuery
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
jQuery轮播图功能制作方法详解
Dec 03 jQuery
jquery制作的移动端购物车效果完整示例
Feb 24 jQuery
jquery html添加元素/删除元素操作实例详解
May 20 jQuery
jQuery实现简单轮播图效果
Dec 27 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
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
移动节点的jquery代码
2014/01/13 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
Koa日志中间件封装开发详解
2019/03/09 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
Python实现的简单模板引擎功能示例
2017/09/02 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Python实现搜索算法的实例代码
2020/01/02 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
高中数学教学反思范文
2016/02/18 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL