`
openxtiger
  • 浏览: 151771 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[原创]jQuery的this和$(this)

 
阅读更多

网上有很多关于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对象了。

2
6
分享到:
评论

相关推荐

    jquery实现图片的左右滚动

    在这个项目中,我们使用的是jQuery 1.4.2版本,尽管这是一个较老的版本,但它仍然能够支持基本的动画效果和DOM操作。 HTML结构是实现图片滚动的基础。我们需要创建一个容器`div`来包含所有的图片`ul`列表项。例如:...

    jquery实现div悬浮中央的效果(原创)

    ### 使用jQuery实现Div悬浮居中的效果 在网页设计与开发中,经常需要让某个元素(如`&lt;div&gt;`)在浏览器窗口中始终保持居中的位置,无论是页面滚动还是窗口大小变化时都能够保持不变。这种效果可以通过多种方式实现,...

    jQuery图片循环轮播代码

    jQuery库因其丰富的插件和简洁的API,成为实现这种功能的理想选择。本篇文章将深入探讨如何使用jQuery创建一个支持左右按钮控制、带有缩略图和焦点图无限循环滚动切换效果的图片轮播代码。 首先,我们需要在HTML...

    基于jquery的页面水印插件可以使用多个水印文字并且行之间错开

    在网页设计中,为了增强网站的安全性和原创性,有时我们需要在页面上添加水印效果。jQuery 是一个广泛使用的 JavaScript 库,它简化了对DOM(文档对象模型)的操作,使得实现复杂的交互效果变得轻松。本篇文章将深入...

    jQuery 插件一

    5. **视频教程大全.url、电子书大全.url、原创Jquery插件大全.url**: 这些URL可能指向资源集合,包含jQuery相关的学习资料、教程和插件库,对于深入学习和开发jQuery插件非常有用。这些资源可以帮助开发者了解最佳...

    分享Jquery实现超酷的时间轴特效

    `视频教程大全.url`、`电子书大全.url`、`原创Jquery插件大全.url`则是关于jQuery学习资源的链接,可以帮助你进一步提升技能。`css`和`js`文件夹可能分别包含了样式表和JavaScript代码,用于实现时间轴特效。 总之...

    图库新版jQuery焦点图 JS代码

    tips[17] = '搜索引擎喜欢原创内容和结构合理的Html,而并非罗列出来的关键字。'; tips[18] = '不要小觑用户的智慧,他们能想出各种办法逃脱你设置的条条框框,找到属于他们方式。'; tips[19] = '想让用户在网站上...

    JQuery 在表单提交之前修改 提交的值 原创

    在本文中,我们将探讨如何使用jQuery在表单提交前修改提交的值,特别是在特定场景下增强搜索功能。在公司的项目中,我们面临一个需求:在二级栏目搜索...同时,这也展示了jQuery在处理DOM交互和事件控制上的强大能力。

    jQuery带简单动画效果的二级导航栏

    本文将详细解析“jQuery带简单动画效果的二级导航栏”的实现原理和关键知识点。 首先,jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画制作和Ajax交互等任务。在这个二级导航栏的实现中,...

    JS表单验证插件(原创)

    总之,JS表单验证插件通过结合JavaScript、jQuery和自定义验证规则,为用户提供了一种简便、灵活的方式来确保表单数据的准确性,降低了前端开发的工作负担。一个优秀的验证插件应该易于配置,具有良好的用户体验,...

    ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter

    •可限制最大输入字符长度 •可设置字符截取速度 •可自定义提示信息文本样式(可以改进自定义文本内容) 该插件统计英文字符和中文的长度是一样的。 废话少说,这里直接奉上详细插件代码,具体实现细节已经在代码里面...

    利用jquery实现下拉框的禁用与启用

    在Web开发中,下拉框(select元素)是表单中常用的一种控件,...同时,支持原创内容的分享,也是推动技术进步和共同学习的重要方式。希望本文对大家在使用jQuery控制下拉框状态时有所帮助,并且欢迎大家进行交流讨论。

    jquery判断元素内容是否为空的方法 <font color=red>原创</font>

    在JavaScript和jQuery中,我们经常需要检查HTML元素的内容是否为空,以便进行相应的处理,比如在本例中的插入广告。以下是一些关于如何使用jQuery来判断元素内容是否为空的方法。 首先,对于`&lt;input&gt;`标签这样的...

    1 妙味课堂原创JavaScript视频教程 JS基础教程5课资料

    妙味课堂的这个原创JavaScript视频教程,旨在帮助初学者系统地学习和掌握JS的基础知识。 教程共分为5课,涵盖了JavaScript的基础内容,以下是每一课可能涉及的关键知识点: **第1课:JavaScript入门** - ...

    BootstrapPlugin - tags 插件编写 (原创bootstrap插件)

    本文将详细介绍如何编写一个原创的 Bootstrap Tags 插件,该插件可以用于创建可编辑、可选择的标签列表,适用于诸如用户兴趣、产品分类等场景。 首先,我们需要了解 Bootstrap 的基本结构和 CSS 样式。Bootstrap ...

    国家省市区四级联动

    最后,`jquery.min.js` 是jQuery库的压缩版,这是一个广泛使用的JavaScript库,提供了许多简化DOM操作和事件处理的便利方法。在这个案例中,它被用来进行DOM选择、事件绑定以及创建和添加`option`元素等操作。 总的...

    Bootstrap 中下拉菜单修改成鼠标悬停直接显示 原创

    Bootstrap是一款流行的前端开发框架...考虑到交互性和兼容性,推荐使用第二种方法,即通过jQuery的事件处理来实现鼠标悬停显示下拉菜单的功能。这种方法既能满足设计需求,又能保持Bootstrap原有的交互逻辑和样式表现。

    Bootstrap 中下拉菜单修改成鼠标悬停直接显示 <font color=red>原创</font>

    然后,添加两个jQuery事件处理函数来控制下拉菜单的展开和关闭: ```javascript // 自动展开 $('.nav .dropdown').mouseenter(function() { $(this).addClass('open'); }); // 自动关闭 $('.nav .dropdown')....

    Knockout API 中文版

    这个文档是我自己原创制作的,在别的网上肯定是没有的。 而且做得非常好看,和非常准确。 如果下载的人多,将会把中英文对照的版本也上传。 Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,...

Global site tag (gtag.js) - Google Analytics