[英]How to add class names to tr and td in multiple tables with conditions?
我希望你们一切都好。
我有多个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>
请帮助我在某些条件下将类名添加到表格单元格( td
)。
tr
) 有 2 个td
,我需要将 Bootstrap 类col col-md-6
到所有td
。tr
) 有 3 个td
,我需要将 Bootstrap 类col col-md-6 col-md-4
到所有td
。tr
) 有 4 个td
,我需要将 Bootstrap 类col col-md-6 col-md-3
到所有td
。 另外,如果您不介意帮助将简单的类名row
添加到tr
。
出于某种原因,我无法手动执行此操作,甚至无法将table
s 更改为div
s。
非常感谢您,祝您度过美好的一天/夜晚!
这是一种简单的方法,我们能不能即兴发挥
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>
你能提到,你的表是从哪里生成的。 我的意思是它是静态表还是动态表。
如果它是静态的,那么我想你知道答案。 在另一种情况下,在从任何数据源渲染表时,您需要先检查长度,在迭代每个表时,您需要使用 jq 选择器检查它们下的 td
$(this.table.td).length()
这是循环下的当前项目。
提及您的更详细的案例,以便我可以准确地提供代码片段。
$('.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.