jQuery $(this)关键字

时间:2012-09-18 16:45:30

标签: jquery

为什么使用$(this)而不是重新选择类很重要?

我在代码中使用了很多动画和css编辑,我知道我可以使用$(this)来简化它。

6 个答案:

答案 0 :(得分:18)

当您通过jQuery(例如$('class-name'))执行DOM查询时,它主动搜索DOM以查找该元素,并返回包含所有jQuery原型方法的元素。

当您在jQuery链或事件中时,您不必重新运行DOM查询,您可以使用上下文$(this)。像这样:

$('.class-name').on('click', (evt) => {
    $(this).hide(); // does not run a DOM query
    $('.class-name').hide() // runs a DOM query
}); 

$(this)将保留您最初请求的元素。它将再次附加所有jQuery原型方法,但不必再次搜索DOM。

更多信息:

Web Performance with jQuery selectors

引用一个不再存在的网络博客,但为了历史,我会把它留在这里:

  

在我看来,最好的jQuery性能提示之一是最小化你对jQuery的使用。也就是说,在使用jQuery和普通的'JavaScript'之间找到一个平衡点,一个好的起点就是'this'。许多开发人员将$(this)专门用作回调中的锤子而忘记了这一点,但差别很明显:

     

当在jQuery方法的匿名回调函数内部时,这是一个   引用当前的DOM元素。 $(this)把它变成了一个jQuery   对象并公开jQuery的方法。 jQuery对象仅此而已   而不是一个强化的DOM元素阵列。

答案 1 :(得分:9)

$(document).ready(function(){
   $('.somediv').click(function(){
   $(this).addClass('newDiv'); // this means the div which is clicked
   });                         // so instead of using a selector again $('.somediv');
});                           // you use $(this) which much better and neater:=)

答案 2 :(得分:5)

看一下这段代码:

HTML:

<div class="multiple-elements" data-bgcol="red"></div>
<div class="multiple-elements" data-bgcol="blue"></div>

JS:

$('.multiple-elements').each(
    function(index, element) {
        $(this).css('background-color', $(this).data('bgcol')); // Get value of HTML attribute data-bgcol="" and set it as CSS color
    }
);

this指的是DOM引擎正在上工作的当前元素,或者指的是

另一个例子:

<a href="#" onclick="$(this).css('display', 'none')">Hide me!</a>

希望你现在明白。处理面向对象的系统时会出现this关键字,或者在本例中, element 面向系统会发生:{/ p>

答案 3 :(得分:2)

使用$(this)可以提高性能,因为不需要在整个网页内容中多次搜索用于搜索的类/任何内容。

答案 4 :(得分:1)

我将向您展示一个示例,该示例将帮助您理解其重要性。

例如,您具有一些Box Widget,并且您希望在每个单个Widget中显示一些隐藏的内容。如果单个窗口小部件具有不同的CSS类,则可以轻松地做到这一点,但是当它具有相同的类时,如何实现呢?
实际上,这就是为什么我们使用 $(this)

**请检查代码并运行:) ** enter image description here

  (function(){ 

            jQuery(".single-content-area").hover(function(){
                jQuery(this).find(".hidden-content").slideDown();
            })

            jQuery(".single-content-area").mouseleave(function(){
                jQuery(this).find(".hidden-content").slideUp();
            })
             
        })();
  .mycontent-wrapper {
      display: flex;
      width: 800px;
      margin: auto;
    }     
    .single-content-area  {
        background-color: #34495e;
        color: white;  
        text-align: center;
        padding: 20px;
        margin: 15px;
        display: block;
        width: 33%;
    }
    .hidden-content {
        display: none;
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="mycontent-wrapper">
    <div class="single-content-area">
        <div class="content">
            Name: John Doe <br/>
            Age: 33  <br/>
            Addres: Bangladesh
        </div> <!--/.normal-content-->
        <div class="hidden-content">
            This is hidden content
        </div> <!--/.hidden-content-->
    </div><!--/.single-content-area-->

    <div class="single-content-area">
        <div class="content">
            Name: John Doe <br/>
            Age: 33  <br/>
            Addres: Bangladesh
        </div> <!--/.normal-content-->
        <div class="hidden-content">
            This is hidden content
        </div> <!--/.hidden-content-->
    </div><!--/.single-content-area-->


    <div class="single-content-area">
        <div class="content">
            Name: John Doe <br/>
            Age: 33  <br/>
            Addres: Bangladesh
        </div> <!--/.normal-content-->
        <div class="hidden-content">
            This is hidden content
        </div> <!--/.hidden-content-->
    </div><!--/.single-content-area-->

</div><!--/.mycontent-wrapper-->

答案 5 :(得分:0)

$(this)返回元素的cached版本,因此提高了性能,因为jQuery不必再次在元素的DOM中进行完整的查找。