$("#search-keyword").focus(function(){
$(this).val("");
// this.value="";
});关于jquery中的$(this) 和 js中的 this一个文本框获得焦点时清空文本框内容的小代码,还不完善,不过这不是重点,重点是想问下第二行和第三行两种写法都能达到同样的要求(清空文本框内容),疑惑的是哪种写法更好,或者说有比这两种更好的写法。$(this)是jquery中的写法,是应该坚持代码类型统一,都用jquery对象来操作,还是简单点的this来解决,浏览器性能上有区别么?
想要提高下认知高度,洗刷下心灵,望成全!!!

解决方案 »

  1.   

    $(this)只是包装成了jquery对象 。
      

  2.   


    那是不是说直接用this.value可以省掉jquery包装的过程,反而会快一些。
      

  3.   

    this是Dom对象,$(this)是Jquery对象,参考两者区别:
    http://www.cnblogs.com/yellowapplemylove/archive/2011/04/19/2021583.html
      

  4.   


    哦,说的很清楚,感觉又懂了一些东西。这几天在学jquery,脑子有点胀,不过还是想再了解下性能问题。
    可能很小的这个地方不所谓,$(this).val("");这种方法是把this对象封装成jquery对象,然后再调用jquery的方法,这样说是不是在这个地方直接用this.value="";这样的形式会不会运行的更快一些?
      

  5.   

    jQuery这么做是有理由的,兼容性是很重要的考虑因素。
      

  6.   

    兼容性是第一考虑理由:
     1。考虑这应用是否指定浏览器使用的,如果开发GPS机器,手持机的就可以考虑单一浏览器写法;
     2。公开网页使用的话,就考虑主流的浏览器就可以了,jQuery 语法都可以兼容的;
     3。公开使用在电脑也要在手机使用的,就要考虑仔细一点;性能非常重要的考虑之一:
    1。如果只是开发小工具,你就不用考虑太多;
    2。走ERP路线的,如果客户端的东西太多,往往都让客户端跑得很慢的了,
    3。你要做开发的工具的产品的话,兼容性和性能都非常重要!jQuery的源代码里都很多 this 的使用的,就是因为需求性能快!
    没必要刻意使用 jq语法的!你的例子里:
    $("#search-keyword").focus(function(){
    $(this).val("");
    // this.value="";
    });
    是臃肿的写法:应该是
    $("#search-keyword").val("").focus();这就是同时追求开发效率和运行效率!因为很多时都会用上
    $("#first").css("..").next().css("..")......parent().show();批量串联跨物件的行为,就是我们用jQuery的原因!开发与执行的效率都会比标准js语法来的快的!
      

  7.   


    $("#search-keyword").focus(function(){
    $(this).val("");
    });这样写我理解的意思是当focus触发的时候才清空内容,你的简洁的写法是页面加载的时候直接获得焦点清空内容。
    不过很感谢你的回答,懂了想要知道的东西,本意也是想对jquery和js性能来个更深入的认知,初学者,别见笑。自己做的。<input type="text" class="search-keyword" id="search-keyword"/>
    //search 点击事件
    $("#search-keyword").val("在这里搜索...");
    $("#search-keyword").focus(function(){
    if($(this).val()=="在这里搜索..."){$(this).val("");}
    });
    $("#search-keyword").blur(function(){
    if($(this).val()==""){$(this).val("在这里搜索...");}
    });页面加载的时候复制,获得焦点的时候判断,失去焦点的时候再判断。