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插件FusionCharts实现的Marimekko图效果示例【附demo源码】
Mar 24 jQuery
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
jQuery 添加样式属性的优先级别方法(推荐)
Jun 08 jQuery
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
jquery实现倒计时小应用
Sep 19 jQuery
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
jQuery中复合选择器简单用法示例
Mar 31 jQuery
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
jQuery-ui插件sortable实现自由拖动排序
Dec 01 jQuery
jQuery实现弹出层效果
Dec 10 jQuery
jQuery 实现扁平式小清新导航
Jul 07 jQuery
jQuery zTree如何改变指定节点文本样式
Oct 16 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设计模式 State (状态模式)
2011/06/26 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
Numpy中的mask的使用
2018/07/21 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
python音频处理的示例详解
2020/12/23 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
数控个人求职信范文
2014/02/03 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
入党函调证明材料
2014/12/24 职场文书
合同纠纷调解书
2015/05/20 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS