jQuery选择器是否从文档根目录以外的HTML对象中进行选择?

时间:2010-06-09 08:56:27

标签: jquery jquery-selectors

jQuery选择器从文档中选择 如何从除root之外的其他位置进行选择? 假设我想从HTML对象中选择一些孩子。

对于此

function dothis(obj)
{
     $j("#tabs").removeClass();
     $j("#tabs>ul").removeClass();
     $j("#tabs>ul>li>a").each(function()
     {
         var tabNum = $j(this).attr("href").replace("#", "");
         var tabContent = $j("div[id=" + tabNum + "]");
         tabContent.removeClass();
         $(tabContent).before("<br><h1>" +$j(this).text() + "</h1>\n" );
     });
     $j("#tabs>ul").each(function()
     {
         $j(this).empty();//remove Ul links on top

     });
}

我想引用我作为参数传入的HTML对象(obj)中的选择器,而不是从文档中选择。

这有效!

$j("#tabs", obj).removeClass();

3 个答案:

答案 0 :(得分:4)

您可以为选择器指定第二个参数以精确上下文:

$j("#tabs", obj).removeClass();

答案 1 :(得分:3)

您可以使用:

$j(obj).find('#tabs')

指定您想要的元素上下文,以便查找内容。有些人更喜欢这种语法:

$j('#tabs', obj)

推荐。它在内部将它转换为与我上面提到的完全相同(.find()),其次,由于切换顺序,它更难阅读。

答案 2 :(得分:1)

如果obj是HTML元素,您可以使用context参数jQuery(selector, context)

  

jQuery( selector, [ context ] )

     

selector包含选择器表达式的字符串
  context要用作上下文的DOM元素,文档或jQuery

即。 $j("#tabs",obj).removeClass()

您还可以在 jQuery对象上使用.find()方法查找匹配元素的子元素,并在内部$(selector, context)仅调用$(context).find(selector)

例如:

function dothis(obj) {
  var $obj = $j(obj);
  $obj.find('#tabs').removeClass();
  // ....
}

虽然,对于任何一个示例,#tabs将搜索ID为tabs的元素,但文档中只能有一个元素具有任何给定ID,您可能需要切换到如果要使此功能在两个不同的上下文中工作,请使用类。