jquery中为什么能用$操作

 更新时间:2019年06月18日 09:59:04   作者:小盆友灬  
这篇文章主要介绍了jquery中为什么能用$操作,jquery直接用$来获取dom节点的方式也非常便捷方便,那么他是怎么实现的呢?,需要的朋友可以参考下

前言

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 插件学习(六)

    把其中的参数默认值作为$.fn.color对象的属性单独进行设计,然后借助jquery.extend方法,覆盖原来的参数选项即可
    2012-08-08
  • javascript 验证日期的函数

    javascript 验证日期的函数

    最近这个项目中有几个需要录入日期的地方,开始由于没有对这些地方进行有效性验证,结果用户录入的日期有好多非法日期,诸如什么2007-2-29,还有2005-2-30等错误日期
    2010-03-03
  • jQuery解析XML 详解及方法总结

    jQuery解析XML 详解及方法总结

    这篇文章主要介绍了jQuery解析XML 实例详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • 基于jQuery实现滚动刷新效果

    基于jQuery实现滚动刷新效果

    这篇文章主要为大家详细介绍了基于jQuery实现滚动刷新效果,使用Ajax获取后台数据更新前端页面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • jquery实现选项卡切换代码实例

    jquery实现选项卡切换代码实例

    这篇文章主要介绍了jquery实现选项卡切换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 基于jquery的固定表头和列头的代码

    基于jquery的固定表头和列头的代码

    基于jquery的固定表头和列头的代码,需要的朋友可以参考下
    2012-05-05
  • jQuery实现点击滚动到指定元素上的方法分析

    jQuery实现点击滚动到指定元素上的方法分析

    这篇文章主要介绍了jQuery实现点击滚动到指定元素上的方法,结合实例形式分析了jQuery响应鼠标事件动态操作页面元素属性的相关相关使用技巧,需要的朋友可以参考下
    2020-03-03
  • jqgrid 简单学习笔记

    jqgrid 简单学习笔记

    JqGrid是JQuery的表格插件,功能非常强大,基本上能想到,它都能实现。下面是一个例子,希望能通过这个示例,能让你了解下JqGrid。
    2011-05-05
  • jquery.alert 弹出式复选框实现代码

    jquery.alert 弹出式复选框实现代码

    jquery alert 弹出式 复选框,需要的朋友可以参考下,代码有点乱。
    2009-06-06
  • 浅谈jQuery中的事件

    浅谈jQuery中的事件

    本文给大家分享的是个人关于jQuery中事件的理解,主要向大家介绍了jQuery中事件的绑定,合成、以及事件冒泡、阻止事件等内容,希望大家能够喜欢。
    2015-03-03

最新评论