2011-02-10 20 views
2

私は子供のサイズが一貫していないことを発見しました。jquery .children()間違ったサイズを返す

以下は、簡単に参照できるように、アラートでフルコードを添付してください。

データを間違って取得する方法はありますか?

<body> 
<table width="100" border="0" cellspacing="0" cellpadding="0"> 
     <tr> 
     <td height="30" valign="top"><strong>Header Title</strong></td> 
     </tr> 

     <tr> 
      <td height="32" valign="top">Date : <strong>01/01/2010 </strong> <br><div><b></b></div><span></span></td> 
     </tr> 
</table> 
</body> 

$("td").each(function() { 
    alert($(this).children().size()); 
}); 

//first td showing 1 direct children- <strong> 
//second td showing 4 direct children- <strong> <br> <div> <span> 

----- 

$("tr").each(function() { 
    alert($(this).children().size()); 
}); 

//first tr showing 1 direct children - <td> 
//second tr showing 1 direct children - <td> 

----- 

$("table").each(function() { 
    alert($(this).children().size()); 
}); 

// ERROR 
// this table showing 1 direct children only.... something WRONG. 
// I thought there are 2 <tr> inside this table? 
+0

はこれを試してみてください?テーブルの行?ちょうど$( "tr")の長さをしてください。テーブルが多数ある場合は、テーブルにIDを追加して$( "#tableid tr")としてアクセスしてください。 – corroded

答えて

6

理由は、あなたのテーブル内<tbody>を持っていないということです。ブラウザはこれを自動的に追加するため、<table>の唯一の子になります。あなたは、TDの子の大きさを求めている

alert($('table').children()[0].tagName); 
+0

これはややこしいことです。特定のブラウザがtbodyを追加する手助けをしない場合はどうでしょうか?その後、クロスブラウザの問題になります。 –

+0

@iヘルプが必要な場合、最良の選択肢は常にHTMLに ''を含めることです。 –

0

、そしてあなたの構造では、あなたのTDは、唯一の子があります:

あなたは、コードのこの部分を実行しているに興味がある可能性が強いのタグを。

あなたのお子さんは、あなたのお子様にお子様にお尋ねしています。それぞれのtrタグは1つのtdしか持たないので、1つしか表示されません。何をカウントしようとしている、方法によって

alert($("tbody").children().length) 
+0

はtd内が強く、br、div、spanが同じレベルです。あなたは強く子供を知っていますか、同じレベルの他の人は子供を考慮していませんか? –

+0

上記の質問にあるように、最初のtdは1つの強いタグしか持っていませんでした。他のすべてのものと2番目のものは、それが警告した理由4とみなされます。 – corroded

関連する問題