2010-11-13 3 views
1

Я определенно знаю, как выбрать ограничивать селектор jQuery для дочерних элементов определенного элемента каждый раз, когда я делаю выбор (т.е. $ ('# left ul') выбирает все ul, которые являются дети #left). Хотя это достаточно просто, если я собираюсь выполнить кучу операций для разных дочерних элементов #left, немного громоздко придется писать $ ('# left ul'), $ ('# left p'), $ ('# left ...'). Вместо этого я бы предпочел просто временно ограничить потенциальные селекторы только детьми из #left. Например:Ограничить все селекторы jQuery для дочерних элементов определенного элемента

...some code that established #left as the "scope" of any future selectors; 
$('ul').css(...); //actually selects $('#left ul') 
$('p').css(...); //actually selects $('#left p') 

...some code that re-established the full DOM as the "scope"; 
$('ul').css(...); //selects all ul, not just children of #left 
$('p').css(...); //selects all p, not just children of #left 

Спасибо!

ответ

2

Просто положитесь на контекст и найдите.

var $l = $('#left') 
    , ul = $l.find('ul') 
    , p = $l.find('p'); 
+0

Фактически ваша переменная l уже является объектом jQuery. Поэтому вы можете просто сказать ul = l.find ('ul'). Не нужно повторно обертывать его. –

+0

Я знаю, что это не всегда появляется в моих ответах. –

+0

Спасибо за ответы. Однако это не ускоряет процесс кодирования. Теперь вы просто застряли писать $ l.find (...) каждый раз, а не $ ('# left ...') каждый раз. Любая идея, которая быстрее? Я бы предположил $ ('# left ...'), но я не основываю это на многом :) – maxedison

0

Метод $ $ может принимать 2 аргумента: селектор и контекст. Таким образом, вы можете использовать следующий синтаксис:

$('.children_selector',$('.the_parent_selector')) 

Но, чтобы избежать использования $ (селектор, контекст). Вы можете написать функцию, «переопределяя» функцию $ и написать свой код внутри. Посмотрите:

  (function($) 
      { 
       //here the $ selects the elements inside the first element with the class xpto 
      })(function(a){return $(a,$('.xpto')[0]);}); 

В любом случае, мне не понравилось бы найти такой вид строительства. Для целей технического обслуживания лучше получить больше строк кодов, чем меньше строк неясного кода.

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