简体   繁体   English

如何在有条件的多个表中将类名添加到 tr 和 td?

[英]How to add class names to tr and td in multiple tables with conditions?

I hope you're all doing well.我希望你们一切都好。

I have multiple table s, all of them have "table" class and without IDs.我有多个table ,它们都有“table”类并且没有 ID。

<table class="table">
    <tbody>
        <tr>
            <td>Table 1, Column 1</td>
            <td>Table 1, Column 2</td>
        </tr>
    </tbody>
</table>
<table class="table">
    <tbody>
        <tr>
            <td>Table 2, Column 1</td>
            <td>Table 2, Column 2</td>
            <td>Table 2, Column 3</td>
        </tr>
    </tbody>
</table>
<table class="table">
    <tbody>
        <tr>
            <td>Table 3, Column 1</td>
            <td>Table 3, Column 2</td>
            <td>Table 3, Column 3</td>
            <td>Table 3, Column 4</td>
        </tr>
    </tbody>
</table>

Please help me with adding class names to table cells ( td ) with some conditions.请帮助我在某些条件下将类名添加到表格单元格( td )。

  • I need to add Bootstrap classes col col-md-6 to all td s if there are 2 td s in a row ( tr ).如果连续 ( tr ) 有 2 个td ,我需要将 Bootstrap 类col col-md-6到所有td
  • I need to add Bootstrap classes col col-md-6 col-md-4 to all td s if there are 3 td s in a row ( tr ).如果连续 ( tr ) 有 3 个td ,我需要将 Bootstrap 类col col-md-6 col-md-4到所有td
  • I need to add Bootstrap classes col col-md-6 col-md-3 to all td s if there are 4 td s in a row ( tr ).如果连续 ( tr ) 有 4 个td ,我需要将 Bootstrap 类col col-md-6 col-md-3到所有td

Also, if you don't mind helping with adding a simple class name row to tr s.另外,如果您不介意帮助将简单的类名row添加到tr

For some reason, I can't manually do this or even change the table s to div s.出于某种原因,我无法手动执行此操作,甚至无法将table s 更改为div s。

Thank you so much and have a wonderful day/night!非常感谢您,祝您度过美好的一天/夜晚!

Here is one simple way, can we improvised这是一种简单的方法,我们能不能即兴发挥

 function applyStyle(tds, className){ for (var i = 0; i < tds.length; i++) { tds[i].className += (tds[i].className ? " " : "") + className } } var tables = document.getElementsByTagName("table"); for (var i = 0; i < tables.length; i++) { var table = tables[i]; var tds = table.getElementsByTagName("td"); switch(tds.length){ case 2: applyStyle(tds,"col col-md-6"); break; case 3: applyStyle(tds,"col-md-4"); break; case 4: applyStyle(tds,"col-md-3"); break; } }
 <!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table class="table" id="matrix"> <tbody> <tr> <td>Table 1, Column 1</td> <td>Table 1, Column 2</td> </tr> </tbody> </table> <table class="table"> <tbody> <tr> <td>Table 2, Column 1</td> <td>Table 2, Column 2</td> <td>Table 2, Column 3</td> </tr> </tbody> </table> <table class="table"> <tbody> <tr> <td>Table 3, Column 1</td> <td>Table 3, Column 2</td> <td>Table 3, Column 3</td> <td>Table 3, Column 4</td> </tr> </tbody> </table>

function setClass(el, className, fn){
  if(el) {
    for (var i of el) {
      if(typeof className === "string")
         i.setAttribute("class", className);
      if(fn) fn(i);
    }
  }
}
var t = document.getElementsByClassName("table");
setClass(t, null, function(i) {
    let tr = i.getElementsByTagName("tr");
    //row > tr
    setClass(tr, "row", function(q) {
        let td = q.getElementsByTagName("td");
        //td > classNames
        if(td.length === 2) 
            setClass(td, "col col-md-6")
        else if(td.length === 3) 
             setClass(td, "col col-md-6 col-md-4")
        else if(td.length === 4) 
             setClass(td, "col col-md-6 col-md-3 ")
    });
})
<table class="table">
    <tbody>
        <tr>
            <td>Table 1, Column 1</td>
            <td>Table 1, Column 2</td>
        </tr>
        <tr>
            <td>Table 1, Column 3</td>
            <td>Table 1, Column 4</td>
        </tr>
    </tbody>
</table>
<table class="table">
    <tbody>
        <tr>
            <td>Table 2, Column 1</td>
            <td>Table 2, Column 2</td>
            <td>Table 2, Column 3</td>
        </tr>
    </tbody>
</table>
<table class="table">
    <tbody>
        <tr>
            <td>Table 3, Column 1</td>
            <td>Table 3, Column 2</td>
            <td>Table 3, Column 3</td>
            <td>Table 3, Column 4</td>
        </tr>
    </tbody>
</table>

Can you mention, from where your table is generating.你能提到,你的表是从哪里生成的。 I mean is it a static table or dynamic.我的意思是它是静态表还是动态表。

If it is static then I think you know the answer.如果它是静态的,那么我想你知道答案。 In another case, while rendering the table from any data source you need to check the length first, and while iterating each table you need to check td under them using jq selector something like在另一种情况下,在从任何数据源渲染表时,您需要先检查长度,在迭代每个表时,您需要使用 jq 选择器检查它们下的 td

$(this.table.td).length() $(this.table.td).length()

where this is the current item under the loop.这是循环下的当前项目。

Mention a more detailed cases of your, SO that I can precisely provide a code snippet.提及您的更详细的案例,以便我可以准确地提供代码片段。

 $('.table').each(function( index ) {
        var ColumnCount = $(this).find('tr td').length;
        if(ColumnCount == 2){
            $(this).find('tr td').each(function(){

                $(this).addClass('col col-md-6');
            });
        }
        if(ColumnCount == 3){
            $(this).find('tr td').each(function(){

                $(this).addClass('col col-md-6 col-md-4');
            });
        }
        if(ColumnCount == 4){
            $(this).find('tr td').each(function(){

                $(this).addClass('col col-md-6 col-md-3');
            });
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM