jquery .children () возвращает неправильный размер - PullRequest
2 голосов
/ 10 февраля 2011

Я только что обнаружил, что размер детей не соответствует.

Ниже приложите полный код с предупреждением, для удобства.

Способ, которым я получаю неправильные данные?

<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?

Ответы [ 2 ]

6 голосов
/ 10 февраля 2011

Причина в том, что у вас нет <tbody> в вашей таблице. Браузер добавляет это автоматически для вас, и, следовательно, он становится единственным потомком <table>.

Возможно, вам будет интересно запустить этот фрагмент кода:

alert($('table').children()[0].tagName);
0 голосов
/ 10 февраля 2011

Вы спрашиваете размер дочерних элементов td, и в вашей структуре у вашего td есть только один дочерний элемент: сильный тег.

Во-вторых, вы спрашиваете детей о ваших Trs. Каждый из ваших тегов tr имеет только 1 тд, поэтому он показывает только 1.

Попробуйте это:

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