【问题标题】:checking number of td tags in a dynamic table and divide them into two equal tr tags检查动态表中td标签的数量并将它们分成两个相等的tr标签
【发布时间】:2014-05-30 16:41:54
【问题描述】:

问题标题可能看起来模棱两可,但我会在这里尝试详细解释。

所以我正在生成一个基于 JSON 数据的动态表。在表格内部,我有几个标签,在其中一个标签中,我进一步填充了包含在标签中的表格数据。 td 标记内的表格数量可能会有所不同,但最大表格数量为 4。这是填充表格后生成的粗略 HTML 标记。

当前标记

<table>
    <tbody>
      <tr>
        <td></td>
      </tr>
      <tr>
        <td></td>
      </tr>
      <tr>
        <td>
          <table>
          </table>
        </td>
        <td>
          <table>
          </table>
        </td>
        <td>
          <table>
          </table>
        </td>
        <td>
          <table>
          </table>
        </td>
      </tr>
      <tr>
        <td></td>
      </tr>
    </tbody>
  </table>  

预期加价

  <table>
    <tbody>
      <tr>
        <td></td>
      </tr>
      <tr>
        <td></td>
      </tr>
      <tr>
        <td>
          <table>
          </table>
        </td>
        <td>
          <table>
          </table>
        </td>
      </tr>
      <tr>
        <td>
          <table>
          </table>
        </td>
        <td>
          <table>
          </table>
        </td>
      </tr>
      <tr>
        <td></td>
      </tr>
    </tbody>
  </table>

正如您在第三个标签中看到的,我有 4 个标签,其中包含各个表格。如果第三行中的标签数量大于 2,我想要实现的目标,那么我应该在下面创建另一个标签,并将 4 个标签(包含表格)分成 2 个标签(每个标签有 2 个标签)。

由于表格是动态生成的,因此我没有预定义的 HTML 标记。

这是我相关的 JS 函数

drawRunningDailyDoublesTables:函数(事件、表格){

        var indexes = $(table).data('BetTableData').eventIndexes;
        table.innerHTML = '';

        // Drawing STAB / NSW product selection
        betTable.drawBetTypeProductSelection(table);

        // Error space
        betTable.drawErrorSpace(table);

        var trForTables = $('<tr/>')
            .appendTo(table);

        // Drawing tables for doubles
        $.each(indexes, function(j, index) {
            var betTableData = new BetTableData();
            betTableData.setMarketId(events[index].markets[0].id);

            var doubleTable = $('<table/>')
                .data('BetTableData', betTableData);

            // Names and info of races
            betTable.drawHeaderForDoubles(doubleTable, events[index], 3);

            // Horse selections
            betTable.drawSelectionsForRunningDoubles(table, doubleTable, events[index], j+1);

            // here I am generating the td tag with tables as mentioned in the question. It could be 2,3 or 4 depending on the different situation.
            $('<td style="vertical-align: top;"/>')
                .appendTo(trForTables)
                .append(doubleTable)

            // Footer
            createFooterRowForRunningDoubles("white", 2, table, doubleTable, j+1);
        });

        // draw button for betting
        betTable.drawExoticBetBtnForDoubles(table);
        betTable.selectDefaultRadioProduct(table);
    },

【问题讨论】:

  • 创建一个 JSFiddle 以帮助回答者隔离受影响的代码 + 发布之前:和之后:(您的问题中只有之前)应用回答者代码后标记的外观,
  • @JFit 我已经在标记前后更新了我的问题。我不确定如何在 Fiddle 上重新创建场景,因为我的代码中没有任何核心内容。一切都是动态生成的,
  • 所以你想要 在每 2 个内表之后?
  • @JFit 没错。它发现第三个 tr 标签中有 4 个表的那一刻。它将它们分成两个 tr 标签,每个标签有 2 个 td(包含表格)。

标签: javascript jquery html


【解决方案1】:

请看这个小提琴:

http://jsfiddle.net/MXGBu/2/

var thirdRow = $('table:first>tbody>tr:nth-child(3)');

var tablesInThird = thirdRow.find('table');


if(tablesInThird.length === 4)
{
 thirdRow.after('<tr class="arse"></tr>');//creates a new tr after 3rd row
 tablesInThird.eq(2).parent().appendTo($('tr.arse')); //adds 3rd table
 tablesInThird = thirdRow.find('table');
 tablesInThird.eq(2).parent().appendTo($('tr.arse')); //adds 4th table
}

【讨论】:

  • 似乎在 Fiddle 上作为独立的 sn-p 工作。但是,我不知道如何将它集成到上面提到的函数中。
  • 你是动态加载的吧?您需要在加载内容后将其放入,即在完整/成功/功能上。
  • 一旦动态内容被加载到 DOM 中。事后操作数据/表格不是没用吗?我不知何故需要操纵这段代码 $('') .appendTo(trForTables) .append(doubleTable)。目前它返回 4 个 td 表(对于这种情况),然后我将其附加到上面函数中定义的一个 tr 标记上。是否可以将 4 个 td 表本身分成 2 个组,然后将 2 个 td 组附加到函数中定义的 tr 标签。这也应该在内容加载到 DOM 之前完成?
  • 也许可以通过 CSS 或在 td 元素本身上设置一些宽度属性并将第三和第四个 td 表移动到下一行?
  • 不太确定如果没有 jquery 来操作 dom 怎么可能。您正在使用的功能是将元素加载到 dom 中,但我的印象是标记的格式由正在添加的项目..如果不是这样,那么您也可以事先进行操作。
猜你喜欢
相关资源
最近更新 更多
热门标签