2009-11-19 21 views
0

我不太確定在jQuery中使用「this」[當前上下文]。我知道的是它阻止了dom搜索所有元素,它只是在當前元素上工作,從而提高性能[正確的我如果我錯了]。我也不知道何時使用這個,什麼時候不使用。 可以說,我應該去this,當前上下文 - 我應該在jQuery中使用?

$("span",this).slice(5).css("display", "none") 

$("span").slice(5).css("display", "none") 

既會工作,但我不是如何真正它works.can有人用DIFF /妥善例子來解釋得很清楚,什麼時候用什麼? [編輯]

 $(function() { 
     $("#clickme").click(function() { 
      $("span",this).slice(5).css('display', 'block');//doesn't work ? why? 
      $("span").slice(5).css('display', 'block');//works..why? 

     }); 
    }); 
enter code here <span id="clickme">Click me</span> 
       <span>itam1</sapn> 
       <span>itam2</sapn> 
       <span>itam3</sapn> 
       <span>itam4</sapn> 
        <span>itam5</sapn> 
        ...upto10 
+0

你將需要提供你的HTML我們來幫助你與此有關。如果所有'spans'都包含在'#clickme'元素中,您的第一行就可以工作。 – 2009-11-19 07:12:25

+0

確定,它的#clickme element.so外面我應該去查找()..它會提高性能? – Wondering 2009-11-19 07:14:56

回答

0

一般可以使用在事件處理程序的this關鍵字,因爲這將是觸發事件和類似$.each其他jQuery函數的元素的引用。

用於處理click事件時,比如讓說:

$('.parentElement').click(function() { 
    $('.foo', this).hide(); 
}); 

上面的代碼,會隱藏所有foo類是被點擊的當前parentElement後代的元素。

使用jQuery函數的上下文參數是撥打電話到find方法是等效的:

$(expr, context); 
// is just equivalent to: 
$(content).find(expr); 

編輯:看你的例子:

$("#clickme").click(function() { 
     $("span",this);//... (1) 
     $("span");//..  (2) 
    }); 

的第一行,將尋找所有span元素裏面的#clickme(它的下降螞蟻),因爲那個元素是觸發click事件的元素。

第二行,將在整個頁面上查找全部span元素。

+0

哈哈。我認爲我所有的例子都使我的解釋不如你的解釋清楚。很好的答案。簡潔明瞭。 – 2009-11-19 07:05:48

+0

更新了post.can你可以看看並幫助我。 – Wondering 2009-11-19 07:08:35

+0

@dcneiner:非常感謝! – CMS 2009-11-19 07:15:51

0

它是如何工作

允許使用HTML的例子:

<div id="container"> 
    <div class="column"><a href="#">Link 1</a></div> 
    <div class="column"><a href="#">Link 2</a></div> 
</div> 
<div id="footer"> 
    <a href="#">Link 3</a><a href="#">Link 3</a> 
</div> 

,才應使用jQuery函數的作用域參數,如果你已經有緩存的引用DOM元素或jQuery的包裹元件設置:

var $set = $('#container'); 
$('a', $set).hide(); // Hides all 'a' tag descendants of #container 

,或事件:

$("#container").click(function(e){ 
    $('a', this).hide(); // Same as call above 
} 

但它是沒有意義的使用它像這樣:

$('a', '#container').hide() 

時候就應該這樣寫:

$('#container a').hide(); 

說了這麼多,所以一般更清潔和更清晰只使用.find(),而不是在jQuery函數使用第二個參數,如果你已經擁有了jQuery或DOM元素。我給第一個例子將被寫入,而不是這樣:

var $set = $('#container'); 
$set.find('a').hide(); // Hides all 'a' tag descendants of #container 

如果這個電話是你搶到#container對象的唯一理由,你也可以把它寫這種方式,因爲它仍然會範圍內搜索到的#container元素:

$("#container a").hide(); // This is the same as $('a', "#container"); 

爲什麼你會範圍的選擇

當jQuery的尋找一個無範圍的選擇,它會在整個d搜索ocument。根據選擇的複雜性,這可能需要搜索的很多。如果你知道你正在尋找的元素只發生在一個特定的父代中,它會真的加快你的代碼的範圍,選擇範圍內的父母。

不管你選擇什麼樣的方法確定範圍,你應該總是範圍的選擇只要有可能。

相關問題