1

嗨,我有这个标记:

<div id="main">
     <div nam="item">1</div>
     <div nam="item">2</div>

     <div>
           <div nam="item">3</div>
           <div nam="item">4</div>
           <div nam="item">5</div>
     </div>

     <div nam="item">6</div>
     <div nam="item">7</div>
</div>

我现在使用此方法仅选择直接子 div:

var divs = $("#main > [nam]"

我的问题 - 我想在我只传递父 div 的函数中执行此操作,我需要如何更改选择器?

function get_rootChildren(div)
{
      return($("* > [nam]",div));
}

^ 这是假的,但我想你知道我的意思 - 怎么能这样做?thx,伏羲

4

5 回答 5

2

也许:

$("#main > div.item")

来自jQuery 选择器文档

parent > child

匹配“parent”指定的元素的“child”指定的所有子元素。

要回答第二部分 - 我会使用.children()这样的东西:

function get_rootChildren(div) {
   $(div).children('div.item');
}
于 2009-11-05T01:35:03.137 回答
1
$('#main > div.item')

选择#main div,然后只选择带有item 类的直接子div 元素。

于 2009-11-05T01:34:57.863 回答
1

只需使用 $("#main > div.item")。">" 选择器确保您在之后放置的内容是之前内容的子项。

于 2009-11-05T01:37:53.163 回答
1

修改以适应新问题

//returns direct children of parent which are divs and have an attribute named name with value item
function get_rootChildren(parent){
  return $(" > div[nam='item']", parent);
}

如果您的结构代码真的看起来像您提供的示例,那么以下将执行此操作。

$('#main > div.item')

以下也能够处理更复杂的结构

$("#main > div.item:not(:has(>div))").each(function(index,item){
    alert($(item).text());
});

例如,在下面我的第二个选择器仍然只提供 1,2,6,7 而第一个选择器将提供 1,2,3,5,6,7

<div id=main>
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">
    <div class="item">3</div>
  </div>
  <div>
    <div>4</div>
  </div> 
  <div class="item">
    <div>5</div>
  </div> 
  <div class="item">6</div>
  <div class="item">7</div>
</div>
于 2009-11-05T01:55:51.443 回答
0

如果您将父级的 id 作为字符串传递,则可以在调用它之前构建表达式:

function get_rootChildren(divId) {
    var expr = "#" + divId + " > [nam]"; // creates expression for jQuery call
    return $(expr);
}
于 2009-11-05T03:01:11.823 回答