![](/img/trans.png)
[英]how to output 3 cells (<td> </td>) per table row for ajax response?
[英]How to get td innerHTML per row and then set div css per row based on this value
我有一个如下表,我想使用javascript
或Jquery
从每行的中间单元格中获取值。 然后我想在最后一个单元格中查看div
( id="myprogres"
) 的宽度以匹配我们刚刚得到的百分比。
我所知道的问题是
td
标签没有id
或任何独特的东西来识别它们。 所以识别每一行的第三个td
并不像getElementById
那样简单myprogress
宽度。myprogress
不是唯一的id
,它是每行相同的id
。 这是表格的简化版本,所以我很感激完整的css
不在那里。
<table> <tr> <td>Hard drive</td> <td>Usage</td> <td>25</td> <td> <div style="width:100%"> <div id="myprogress"></div> </div> </td> </tr> <tr> <td>Memory</td> <td>Usage</td> <td>50</td> <td> <div style="width:100%"> <div id="myprogress"></div> </div> </td> </tr> <tr> <td>Brain Power</td> <td>Usage</td> <td>75</td> <td> <div style="width:100%"> <div id="myprogress"></div> </div> </td> </tr> </table>
我的
td
标签没有id
或任何独特的东西来识别它们。
这不是问题,因为您可以直接遍历进度条。
我想获取每一行的值,然后根据该值设置相应的 myprogress 宽度。
如上,您可以遍历进度条并使用 DOM 遍历方法从前一个td
单元格中获取相关值以设置为进度条的宽度。 特别是closest()
和prev()
方法。
myprogress 不是唯一的 id,它是每行相同的 id。
这是无效的 HTML,需要修复。 改用class
。
说了这么多,试试这个:
$('.myprogress').css('width', function() { return $(this).closest('td').prev().text() + '%'; });
table { width: 100%; } table td { width: 25%; } .myprogress { height: 20px; background-color: #C00; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script> <table> <tr> <td>Hard drive</td> <td>Usage</td> <td>25</td> <td><div class="myprogress"></div></td> </tr> <tr> <td>Memory</td> <td>Usage</td> <td>50</td> <td><div class="myprogress"></div></td> </tr> <tr> <td>Brain Power</td> <td>Usage</td> <td>75</td> <td><div class="myprogress"></div></td> </tr> </table>
首先在表的第 4 个 td 中找到所有的 div
var divs = $("tr td:nth-child(4) div");
运行一个循环来设置 div 的宽度并从第三个 td 中获取值
for(var i=0;i<divs.length;i++) {
$(divs[i]).css({'width': $(divs[i]).parent().prev('td').text() + '%'});
}
使用纯 Vanilla JS,您可以在没有 jquery的情况下借助querySelector()方法实现结果..
const table = document.querySelector('table'); const row = table.querySelectorAll('tr'); row.forEach((tr,i) => { const width = tr.querySelectorAll("tr td:nth-of-type(3)")[0].textContent; const progress = tr.querySelectorAll("tr td:nth-of-type(4)")[0]; progress.querySelector('div').style.width = `${width}%`; })
table td { width: 10%; } #myprogress { height: 20px; background-color: green; }
<table> <tr> <td>Hard drive</td> <td>Usage</td> <td>25</td> <td> <div style="width:100%"> <div id="myprogress"></div> </div> </td> </tr> <tr> <td>Memory</td> <td>Usage</td> <td>50</td> <td> <div style="width:100%"> <div id="myprogress"></div> </div> </td> </tr> <tr> <td>Brain Power</td> <td>Usage</td> <td>75</td> <td> <div style="width:100%"> <div id="myprogress"></div> </div> </td> </tr> </table>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.