没有孩子选择

时间:2011-11-23 01:20:19

标签: jquery for-loop each children

我有一些htmls,其中一些标签没有任何子项,我想识别它们并计算这些标签的数量。

我尝试过以下操作,似乎无法正常工作:

var count = 0;
$("th[class=gridlabel]").each(function(){
if($("th[class=gridlabel]").children().length<1)
 {
count++;
 }
});
return count;
alert(count);

不确定这里的问题是什么。


我已经从html源代码添加了一些额外的脚本,我想确保“count”只计算前两个标签,“answer 3”和“answer 4”,因为他们的标签没有子代:

  <tr>
    <th class="gridlabel">answer 3</th>
    <td headers="q12_header1" class="gridcell"><input><div><span>answer 3</span><label>1</label></div></td>
    <td headers="q12_header2" class="gridcell"><input><div><label></label></div></td>
  </tr>
  <tr>
    <th class="gridlabel">answer 4</th>
    <td headers="q12_header1" class="gridcell"><input><div><span>answer 4</span><label>1</label></div></td>
    <td headers="q12_header2" class="gridcell"><input><div><label></label></div></td>
  </tr>
  <tr>
    <th class="gridlabel">other specify 1<input><label>other specify 1</label></th>
    <td><input><div><span>other specify 1</span><label>1</label></div></td>
    <td><input><div><label>2</label></div></td>
  </tr>

2 个答案:

答案 0 :(得分:3)

var count = $("th.gridlabel:empty").length;
return count;

<强>更新

鉴于您提供的HTML,如果您知道“非空”单元格将具有输入子项,则可以使用此类内容:

var count = $('th:not(:has(input))').length;

如果你想要一些更灵活但更长一点的东西,你可以做类似的事情:

var count = 0;
$('th').each(function(){
    if($(this).children().length < 1)
    {
        count++;
    }
})

这样你就可以覆盖任何可能的子标签。这实际上取决于你的需求。

答案 1 :(得分:0)

试试这个:

var count = 0;
$("th[class=gridlabel]").each(function(){
    if(this.children().length<1)
    {
        count++;
    }
});
return count;
alert(count);