2012-10-15 33 views
0

我想限制jQuery到特定的命名空間或DOM節點。目前,我做的是什麼LIK這在每一行快捷方式限制jQuery到特定的DOM節點

$('a' , $node).addClass(); 
$('li' , $node).removeAttr(); 
$('div#q' , $node).hide(); 

等等..有沒有什麼快捷方式/方法,我可以指定後jQuery對象的範圍將僅限於$node

+0

jQuery的上下文選擇實施後,對內,用'找到()',所以它會更有意義顯式調用'找到()'方法自己:'$ node.find('a')。hide()'(假設'$'前綴已經表示一個jQuery對象,否則:'$($ node).find('a')')。 –

回答

2

您可以直接更改$方法。

將$賦給返回$ node.find()的函數,就完成了。

jQuery(function($){ 
     var $node = $('div'); 
     var _$ = $; 

     $ = function(selector){ 
      return $node.find(selector); 
     }; 

     $('p:first').fadeOut(); 

     // Return $ to its previous owner 
     $ = _$; 
    }); 

的jsfiddle:http://jsfiddle.net/pmYRw/1/

+0

正是我想要的感謝!選擇這個作爲正確的答案。請在此處粘貼代碼。 –

+0

居然沒有想到我做到了:-) –

+0

編輯答案。還修復了一個問題,其中$ node將轉到全局名稱空間 –

1

你可以連你的方法,這樣,你只寫了選擇一次:

$('a' , $node).addClass('aclass').removeAttr('rel').hide(); 

或也保存在變量參考重用它:

var a = $('a' , $node); 
a.addClass('aclass'); 
a.removeAttr('rel'); 
a.hide(); 
+0

我覺得我的例子很糟糕。更新我的代碼 –

0

,而不是$節點(我認爲它是一個已經實例化的jquery對象),你可以將它寫成一個字符串:

$('a', '#main') #≠> all anchor tags under element with main as id 

$('a', '#main li') #≠> all anchor tags al li's under element with main as id 

你c一個還先初始化主元素,然後在其子範圍搜索:

var main = $('#main'); 
main.find('a'); 
main.find('li a'); 

這將是更高性能的。

0
$('a' , $node).addClass(); 
$('a' , $node).removeAttr(); 
$('a' , $node).hide(); 

而不是綁定$('a',$ node)幾次你可以緩存這個變量並像下面一樣使用它。這也會改善你的表現。

var node = $('a' , $node); 
node.addClass(); 
node.removeAttr(); 
node.hide(); 

我們可以通過鏈接他們像下面

var node = $('a' , $node); 
node.addClass().removeAttr().hide(); 

重用變量和鏈接的jQuery會對你的代碼產生巨大的影響提高該代碼多一點。