2012-10-15 3 views
0

Я хочу ограничить jQuery определенным пространством имен или узлом DOM. В настоящее время, что я делаю что-то Лик это на каждой линииОграничение ярлыка 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 будет иметь огромное влияние на вас код.

Смежные вопросы