将所有jQuery选择器限制为特定元素的子元素

时间:2010-11-13 21:09:58

标签: javascript jquery dom css-selectors

我当然知道如何在每次进行选择时选择将jQuery选择器限制到特定元素的子元素(即$('#left ul')选择所有ul为#left的子元素。虽然这很简单,如果我要对#left的各个孩子进行一系列操作,那么继续编写$('#left ul'),$('#left p')是有点麻烦的, $('#left ...')。相反,我宁愿只能暂时将潜在的选择器限制在#left的孩子身上。例如:

...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 个答案:

答案 0 :(得分:2)

只需依赖上下文并找到。

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

答案 1 :(得分: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]);});

无论如何,我不喜欢找到这种结构。出于维护目的,获得更多代码行比使用更少的模糊代码行更好。