jQuery, чтобы найти, сколько tr во вложенной таблице, чтобы перебирать элементы

#jquery

#jquery ( jquery )

Вопрос:

Я попытался использовать jQuery, чтобы найти, сколько tr во вложенной таблице, чтобы перебирать элементы для экспорта в Excel. Вложенная таблица не имеет идентификатора или класса.

Я попытался динамически добавить идентификатор во вложенную таблицу. С идентификатором гораздо проще получить количество tr. Но, похоже, это не работает: $(«#Main»).find(«таблица»).attr(‘id’,’вложенный’);

Очень признателен! следующий код таблицы

 
<table id="Main">
   <thead>
      <tr>
     <th style="width: 45px;"><input style="margin:0" type="checkbox" id ="CheckAllTable" class="checkAll" name="checkAll"></th>
        <th style="width: 100px;">Column1</th>
         <th style="width: 330px;">Column2</th>`enter code here`
         <th style="width: 112px;">Column3</th>
      </tr>
   </thead>
   <tbody id ="Tbody">
      <tr>
         <td><input style="margin:0" type="checkbox" name="check"></td>
         <td><a target="_blank" href="https://www.example.com/">xxx testing</a></td>
         <td>
            <span>
                  <table style="border-collapseamp;#58;collapse;table-layoutamp;#58;auto;widthamp;#58;100%;borderamp;#58;1px;">
                     <tr>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">subcolumn1</th>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;">subcolumn2</th>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;">subcolumn3</th>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;">subcolumn4</th>
                     </tr>
                     <tr>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">AAA</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;50%;">BBB</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">CCC,DDD</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;10%;">EEE</td>
                     </tr>
                     <tr>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">AAA1</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;50%;">BBB1</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">CCC1</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;10%;">EEE1 </td>
                     </tr>
                  </table>
               </div>
            </span>
         </td>
         <td><span>08/18/2020</span></td>        
      </tr>
   </tbody>
</table>
 

Комментарии:

1. Во вложенной таблице нет идентификатора nested .

2. Если вы можете программно перейти к таблице, чтобы добавить идентификатор, вы можете программно перейти к таблице, чтобы посчитать tr s…

3. @HereticMonkey, да, я пытался программно добавить идентификатор во вложенную таблицу, используя: $(«#Main»).find(«таблица»).attr(‘id’,’nested’); но это не работает.

4. Да, я это читал. Я хотел сказать, что вам не нужно получать элемент, добавлять идентификатор, затем снова получать элемент, а затем считать tr s. То же самое, что сказано в ответе, во втором абзаце.

Ответ №1:

На самом деле вам не нужен jQuery для этого — прямой vanila JS сделает это.

В любом случае вы используете селектор для получения родительской таблицы (#Main), а затем внутри этого другого селектора для получения вложенной таблицы и ее tr.length;

Следующий фрагмент показывает вашу таблицу и подход, отличный от jquery, а также jquery aporach.

Также обратите внимание, что вам следует изменить свой код, IMO. Всегда лучше отделять CSS от HTML — поэтому весь этот встроенный CSS должен быть перемещен в блок CSS.

И вы должны, для семантически правильной структуры таблицы, иметь свои th в элементе thead, а остальные — в элементе tbody.

 const nonjQueryNestedTable = document.querySelector('#Main table');
const nonjQueryNestedTableTrLength = nonjQueryNestedTable.querySelectorAll('tr').length;
console.log('non-jquery: '   nonjQueryNestedTableTrLength); // gives 3

$(document).ready(function(){
  const nestedTable = $('#Main').find('table');
  const nestedTableTrLength = nestedTable.find('tr').length;
  console.log('jquery: '   nestedTableTrLength); // gives 3
}) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="Main">
   <thead>
     <tr>
     <th style="width: 45px;"><input style="margin:0" type="checkbox" id ="CheckAllTable" class="checkAll" name="checkAll"></th>
        <th style="width: 100px;">Column1</th>
         <th style="width: 330px;">Column2</th>
         <th style="width: 112px;">Column3</th>
      </tr>
   </thead>
   <tbody id ="Tbody">
      <tr>
         <td><input style="margin:0" type="checkbox" name="check"></td>
         <td><a target="_blank" href="https://www.example.com/">xxx testing</a></td>
         <td>
            <span>
                  <table style="border-collapseamp;#58;collapse;table-layoutamp;#58;auto;widthamp;#58;100%;borderamp;#58;1px;">
                     <tr>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">subcolumn1</th>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;">subcolumn2</th>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;">subcolumn3</th>
                        <th style="text-alignamp;#58;center;borderamp;#58;1px solid orange;">subcolumn4</th>
                     </tr>
                     <tr>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">AAA</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;50%;">BBB</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">CCC,DDD</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;10%;">EEE</td>
                     </tr>
                     <tr>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">AAA1</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;50%;">BBB1</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;20%;">CCC1</td>
                        <td style="text-alignamp;#58;left;borderamp;#58;1px solid orange;paddingamp;#58;10px;widthamp;#58;10%;">EEE1 </td>
                     </tr>
                  </table>
               </div>
            </span>
         </td>
         <td><span>08/18/2020</span></td>        
      </tr>
   </tbody>
</table> 

Комментарии:

1. спасибо за вашу помощь! Другое дело, как мне получить AAA и BBB во вложенной таблице в цикле?