2012-05-21 46 views
1

jQuery.proxy()有一些我在尋找的功能,但ideallyI希望能夠做這樣的事情:有沒有辦法在jQuery中爲一組命令定義上下文?

$('#some-id').context(function(){ 
    $('.some-class').show(); 
    $('li').css('background','red'); 
}); 

其效果是一樣的:

$('#some-id .some-class').show(); 
$('#some-id li').css('background','red'); 

jQuery是否有像我的context以上的方法?

+0

你爲什麼要轉兩行代碼的詳細信息是4行? – xdazz

+0

簡化代碼組織並簡化重用。 –

回答

0

你可以得到,它定義在jQuery呼叫的關聯最接近:

var $el = $('#some-id'); 
$('.some-class', $el).show(); 
$('li', $el).css('background','red'); 

您還可以使用鏈接:

$('#some-id') 
    .find('.some-class').show().end() 
    .find('li').css('background','red'); 

在這兩種情況下,的改善將是你唯一的查詢DOM一次初始選擇('#some-id'在這種情況下)。

+0

請注意,這隻適用於主'$()'方法 - 它不適用於其他jQuery方法,如.append()。 – Alnitak

+0

@Alnitak對,這就是爲什麼我在開始時編寫'jQuery'調用('$'是一個快捷方式)。 – kapa

+0

這不是我的觀點 - 例如,您不能執行'$(foo).appendTo(parent,context)'。 – Alnitak

0

有一種稱爲上下文的方法,但它會返回上下文。在jQuery中,如果你想設置上下文,那麼你可以將它傳遞給jQuery選擇器作爲第二個參數。下面是一個例子jQuery(selector [ , context ] ),您可以使用它像這樣$("input:radio", document.forms[0]);

要了解更多關於通過上下文http://api.jquery.com/context/

有關檢索方面請參考http://api.jquery.com/context/

相關問題