jquery&js $(this) & this

序言:在使用jquery操作js时,经常整不明白this与$(this)。抽空仔细测试了一把,记录下来以供在忘记的时候拉出来参考参考!

$(this)生成的是什么

$()生成的是什么呢?实际上$()=jquery(),那么也就是说返回的是一个jquery的对象。

题外话:通常我们为了简便直接使用$(),实际上,该函数省略了一个参数context,即$(selector)=$(selector,document).如果指定context,可以指定context为一个dom元素集或者jquery对象。

那么依照,$()返回的是jquery对象这一结论,我们可以得出$(this)得到的是一个jquery对象.我们可以使用万能的alert()方法打印出一个对象:

alert($(‘#btn‘));显示的结果:

该图红色框勾选出来的是一个object,不用考虑,该object自然是jquery的对象咯。也即是说我们用通过$(‘#btn‘)来调用jquery的方法和属性等。

this代表什么?

this,编程的人都知道this表示上下文所处的这个对象,这个自然是不错的,可是这个对象到底是个什么对象呢?加入js里面也有getType的话返回的值会是什么呢?其实js里面不需要使用getType,因为我们有万能的alert.请看看下面的代码:

$(‘#btn‘).bind("click",function(){

alert(this);

alert($(this));

});

根据我们的经验(因为$()生成的是jquery的对象嘛),this自然是一个jquery的对象咯。可是我们看看返回的结果:

返回的是什么?【object
HTMLInputElement】——伟大的html对象,嘿嘿。所以我们通常在直接使用this.val()或者直接通过this来调用jquery所特有的方法或属性的时候会报错误: 
为什么呢?明知故问!html对象当然“不包含属性或方法”了。那么为什么在一个jquery对象的上下文中调用this返回的是一个html对象而不是jquery对象 呢?翻遍jquery的api文档,貌似jquery中并未对this这一关键字进行过特殊“处理”,也就是说这里this是js中的,而不是jquery重新定义了的。so...当然这仅仅是我自己的想法,如果有对此更了解的朋友可以留言更正。而我们再看一下以上代码中alert($(this));的返回,自然是jquery的对象了,在此调用jquery特有的方法和属性,完全没有问题。

结论:

this,表示当前的上下文对象是一个html对象,可以调用html对象所拥有的属性,方法

$(this),代表的上下文对象是一个jquery的上下文对象,可以调用jquery的方法和属性值。

jQuery中this与$(this)的区别

  1. $("#textbox").hover(
  2. function() {
  3. this.title = "Test";
  4. },
  5. fucntion() {
  6. this.title = "OK”;
  7. }
  8. );

这里的this其实是一个Html 元素(textbox),textbox有text属性,所以这样写是完全没有什么问题的。

但是如果将this换成$(this)就不是那回事了,Error--报了。this与$(this)的区别在此。

  1. Error Code:
  2. $("#textbox").hover(
  3. function() {
  4. $(this).title = "Test";
  5. },
  6. function() {
  7. $(this).title = "OK";
  8. }
  9. );

这里的$(this)是一个JQuery对象,而jQuery对象沒有title 属性,因此这样写是错误的。

JQuery拥有attr()方法可以get/set DOM对象的属性,所以正确的写法应该是这样:

正确的代码:

  1. $("#textbox").hover(
  2. function() {
  3. $(this).attr(’title’, ‘Test’);
  4. },
  5. function() {
  6. $(this).attr(’title’, ‘OK’);
  7. }
  8. );

使用jQuery的好处是它包裝了各种浏览器版本对DOM对象的操作,因此统一使用$(this)而不再用this应该是比较不错的选择。

下面再看一个w3School上的例子:

<!DOCTYPE html>

<html>

<head>

<script type="text/javascript" src="/jquery/jquery.js"></script>

</head>

<body>

<ul>

<li><strong>list</strong> item 1 - one strong tag</li>

<li><strong>list</strong> item <strong>2</strong> -

two <span>strong tags</span></li>

<li>list item 3</li>

<li>list item 4</li>

<li>list item 5</li>

</ul>

<script>

$("li").click(function() {

var $li = $(this),

isWithTwo = $li.is(function() {

return $(‘strong‘,this).length === 2;

});

if ( isWithTwo ) {

$li.css("background-color", "green");

} else {

$li.css("background-color", "red");

}

});

</script>

</body>

</html>

注意上面代码中$(‘strong‘,this).length === 2这一句this的作用:通常我们为了简便直接使用$(),实际上,该函数省略了一个参数context,即$(selector)=$(selector,document).如果指定context,可以指定context为一个dom元素集或者jquery对象。我们可以通过去掉this来查看效果从中来领悟这行代码的作用。在此不作分析,呵呵!

jQuery中this与$(this)的区别就介绍到这里。

时间: 2024-08-02 11:02:07

jquery&js $(this) & this的相关文章

jquery js

看jquery cookbook 读书笔记 $(this)是不能随便乱用滴. 举个栗子 1 $(document).ready(function(){ 2 $(".clicky").click(function(){ 3 $(this).addClass("clicked"); 4 setTimeout(function(){ 5 $(this).removeClass("clicked"); 6 },5000); 7 }); 8 }); 点击这

PHP 弹窗 源代码 css Jquery.js

// 每个弹窗的标识 var x =0; var idzt = new Array(); var Window = function(config){ //ID不重复 idzt[x] = "zhuti"+x; //弹窗ID //初始化,接收参数 this.config = { width : config.width || 300, //宽度 height : config.height || 200, //高度 buttons : config.buttons || '', //默认

JS文件中加载jquery.js

原文链接:http://blog.csdn.net/whatday/article/details/39553451 最近有一个需求: 1.在一个html中只能引入一个JS文件 不能有JS代码和其他JS文件的引入 2.这个JS文件中 还要引入其他的JS文件 3.所有JS功能都写在这个JS文件中 这些代码用到了jQuery相关的东东 所以这里第一个需要解决的就是怎么引入jquery.js 在网上搜索了很多方法都不太实用,由于我自己离开WEB多年 最后向朋友询问得到以下代码 1.js [javasc

chosen.jquery.js

http://baifjece.blog.163.com/blog/static/33794654201286102519119/ ------------------首次加载设置默认选中项--------- 给select标签的option 设置selected即可 Chosen—强大的jquery模拟选择框插件 2012-09-06 10:25:19|  分类: JQuery |  标签:chosen  jquery  模拟选择  |举报|字号 订阅 很久没写jquery相关的内容了.今天明

低级错误,未引入jquery.js

<!DOCTYPE html><html><head><script src="jquery-1.4.1.min.js"></script><script> $(document).ready(function(){      $("#verifyButton").click(function(){          var carname="Volvo";         

引用外部jquery.js

使用 Google 的 CDN <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script> </head> 使用 Microsoft 的 CDN <head> <script type="text/javascript

experss路由工作原理

router.get("/", function(req, res) { res.render("index", {"title":"express"}); }); 这段代码的意思是当访问主页时,调用ejs模板引擎,来渲染index.ejs模板文件(即将title变量全部替换为字符串Express),生成静态页面并显示在浏览器中. 我们来做一些修改,以上代码实现了路由的功能,我们当然可以不要routes/index.js文件,

What&#39;s the difference between jquery.js and jquery.min.js?

They are both the same functionally but the .min one has all unnecessary characters removed in order to make the file size smaller. Just to point out as well, you are better using the minified version (.min) for your live environment as Google are no

图片延迟插件 Jquery.lazyload.min.js

当一个页面打开的图片太多,我们可以用jquery的一个延迟加载插件.名为:jquery.lazyload.min.js 使用非常简单,下面我就把示例代码帖出来. 1 <div style="height:700px;"> 2 <img src="img/grey.gif" data-original="http://www.ziyou.com.cn/ziyou/uploadImg/bberfq.jpg" width="