网上有很多关于jQuery的this和$(this)的介绍,大多数只是理清了this和$(this)的指向,其实它是有应用场所的,不能一概而论在jQuery调用成员函数时,this就是指向dom对象。
$(this)指向jQuery对象是无可厚非的,但this就是指向dom对象,这个是因为jQuery做了特殊的处理。
在创建dom的jQuery对象时,jQuery不仅仅为dom创建一个jQuery对象,而且还将dom存储在所创建对象的数组中。
elem = document.getElementById(match[2]);
if (elem && elem.parentNode) {
this.length = 1;
this[0] = elem;
}
this.context = document;
this.selector = selector;
return this;
this[0] = elem这条语句就是实现对象数组。所以javascript是很有意思的语言,使用this访问时,可以访问它所指向的对象的成员函数,而其实this又是一个对象数组。其存放的是dom对象。
先看看 $("p").each() -- 循环
each: function( callback, args ) {
return jQuery.each( this, callback, args );
}
看了each函数的调用大家应该明白,jQuery.each( this, callback, args );调用的是对象数组,而对象的数组存储的是dom对象,因此在callback函数中的this自然是dom对象了
再看看$("p").hide() -- 成员函数
hide: function() {
return showHide( this );
},
function showHide( elements, show ) {var elem, display,
values = [],
index = 0,
length = elements.length;
for ( ; index < length; index++ ) {
elem = elements[ index ];
if ( !elem.style ) {
continue;
}
values[ index ] = jQuery._data( elem, "olddisplay" );
if ( show ) {
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
if ( !values[ index ] && elem.style.display === "none" ) {
elem.style.display = "";
}
// Set elements which have been overridden with display: none
// in a stylesheet to whatever the default browser style is
// for such an element
if ( elem.style.display === "" && isHidden( elem ) ) {
values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
}
} else {
display = curCSS( elem, "display" );
if ( !values[ index ] && display !== "none" ) {
jQuery._data( elem, "olddisplay", display );
}
}
}
// Set the display of most of the elements in a second loop
// to avoid the constant reflow
for ( index = 0; index < length; index++ ) {
elem = elements[ index ];
if ( !elem.style ) {
continue;
}
if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
elem.style.display = show ? values[ index ] || "" : "none";
}
}
return elements;
}
从上面的代码可以看出hide行数其实调用的是showHide,而传入的第一个参数this,并不是dom对象,而是jQuery对象数组,因此showHide函数通过循环此对象数组获取每一个dom对象。
最后看看$("p").bind() -- 事件
bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
},
on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
// 此部分代码省略
return this.each( function() {
jQuery.event.add( this, types, fn, data, selector );
});
},
bind函数调用的是 on函数,而on函数又是通过 each函数实现了jQuery.event.add。因此 jQuery.event.add( this中的this也就是dom对象了。所以事件中的this也就是dom对象了。
分享到:
相关推荐
在这个项目中,我们使用的是jQuery 1.4.2版本,尽管这是一个较老的版本,但它仍然能够支持基本的动画效果和DOM操作。 HTML结构是实现图片滚动的基础。我们需要创建一个容器`div`来包含所有的图片`ul`列表项。例如:...
### 使用jQuery实现Div悬浮居中的效果 在网页设计与开发中,经常需要让某个元素(如`<div>`)在浏览器窗口中始终保持居中的位置,无论是页面滚动还是窗口大小变化时都能够保持不变。这种效果可以通过多种方式实现,...
jQuery库因其丰富的插件和简洁的API,成为实现这种功能的理想选择。本篇文章将深入探讨如何使用jQuery创建一个支持左右按钮控制、带有缩略图和焦点图无限循环滚动切换效果的图片轮播代码。 首先,我们需要在HTML...
在网页设计中,为了增强网站的安全性和原创性,有时我们需要在页面上添加水印效果。jQuery 是一个广泛使用的 JavaScript 库,它简化了对DOM(文档对象模型)的操作,使得实现复杂的交互效果变得轻松。本篇文章将深入...
5. **视频教程大全.url、电子书大全.url、原创Jquery插件大全.url**: 这些URL可能指向资源集合,包含jQuery相关的学习资料、教程和插件库,对于深入学习和开发jQuery插件非常有用。这些资源可以帮助开发者了解最佳...
`视频教程大全.url`、`电子书大全.url`、`原创Jquery插件大全.url`则是关于jQuery学习资源的链接,可以帮助你进一步提升技能。`css`和`js`文件夹可能分别包含了样式表和JavaScript代码,用于实现时间轴特效。 总之...
tips[17] = '搜索引擎喜欢原创内容和结构合理的Html,而并非罗列出来的关键字。'; tips[18] = '不要小觑用户的智慧,他们能想出各种办法逃脱你设置的条条框框,找到属于他们方式。'; tips[19] = '想让用户在网站上...
在本文中,我们将探讨如何使用jQuery在表单提交前修改提交的值,特别是在特定场景下增强搜索功能。在公司的项目中,我们面临一个需求:在二级栏目搜索...同时,这也展示了jQuery在处理DOM交互和事件控制上的强大能力。
本文将详细解析“jQuery带简单动画效果的二级导航栏”的实现原理和关键知识点。 首先,jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画制作和Ajax交互等任务。在这个二级导航栏的实现中,...
总之,JS表单验证插件通过结合JavaScript、jQuery和自定义验证规则,为用户提供了一种简便、灵活的方式来确保表单数据的准确性,降低了前端开发的工作负担。一个优秀的验证插件应该易于配置,具有良好的用户体验,...
•可限制最大输入字符长度 •可设置字符截取速度 •可自定义提示信息文本样式(可以改进自定义文本内容) 该插件统计英文字符和中文的长度是一样的。 废话少说,这里直接奉上详细插件代码,具体实现细节已经在代码里面...
在Web开发中,下拉框(select元素)是表单中常用的一种控件,...同时,支持原创内容的分享,也是推动技术进步和共同学习的重要方式。希望本文对大家在使用jQuery控制下拉框状态时有所帮助,并且欢迎大家进行交流讨论。
在JavaScript和jQuery中,我们经常需要检查HTML元素的内容是否为空,以便进行相应的处理,比如在本例中的插入广告。以下是一些关于如何使用jQuery来判断元素内容是否为空的方法。 首先,对于`<input>`标签这样的...
妙味课堂的这个原创JavaScript视频教程,旨在帮助初学者系统地学习和掌握JS的基础知识。 教程共分为5课,涵盖了JavaScript的基础内容,以下是每一课可能涉及的关键知识点: **第1课:JavaScript入门** - ...
本文将详细介绍如何编写一个原创的 Bootstrap Tags 插件,该插件可以用于创建可编辑、可选择的标签列表,适用于诸如用户兴趣、产品分类等场景。 首先,我们需要了解 Bootstrap 的基本结构和 CSS 样式。Bootstrap ...
最后,`jquery.min.js` 是jQuery库的压缩版,这是一个广泛使用的JavaScript库,提供了许多简化DOM操作和事件处理的便利方法。在这个案例中,它被用来进行DOM选择、事件绑定以及创建和添加`option`元素等操作。 总的...
Bootstrap是一款流行的前端开发框架...考虑到交互性和兼容性,推荐使用第二种方法,即通过jQuery的事件处理来实现鼠标悬停显示下拉菜单的功能。这种方法既能满足设计需求,又能保持Bootstrap原有的交互逻辑和样式表现。
然后,添加两个jQuery事件处理函数来控制下拉菜单的展开和关闭: ```javascript // 自动展开 $('.nav .dropdown').mouseenter(function() { $(this).addClass('open'); }); // 自动关闭 $('.nav .dropdown')....
这个文档是我自己原创制作的,在别的网上肯定是没有的。 而且做得非常好看,和非常准确。 如果下载的人多,将会把中英文对照的版本也上传。 Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,...