Javascript JS循环表并根据条件在列中打印文本

Javascript JS循环表并根据条件在列中打印文本,javascript,html-table,Javascript,Html Table,我有一个简单的表,我需要根据隐藏列上的条件在特定列中打印文本。一条记录中有多行具有相同的TD ID。我需要做的是检查表中的每一行,并检查status1 gv-field-15-139、status2 gv-field-15-140和status3 gv-field-15-141。如果状态gv-field-15-150之一为“已完成”,我想在状态栏中打印“已完成”。可能吗 $document.readyfunction{ 如果$'tdgv-field-15-139'.text='Complete

我有一个简单的表,我需要根据隐藏列上的条件在特定列中打印文本。一条记录中有多行具有相同的TD ID。我需要做的是检查表中的每一行,并检查status1 gv-field-15-139、status2 gv-field-15-140和status3 gv-field-15-141。如果状态gv-field-15-150之一为“已完成”,我想在状态栏中打印“已完成”。可能吗

$document.readyfunction{ 如果$'tdgv-field-15-139'.text='Completed'| |$'tdgv-field-15'- 140“。文本==“已完成”| |$“tdgv-field-15-141”。文本==“已完成”{ $tdgv-field-15-150.文本“已完成”; } 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 完整的 悬而未决的 悬而未决的 循环你的tr,除了第一个tr有th和检查td。虽然你可以用ids解决你的问题,但建议使用类而不是ids

$document.readyfunction{ var trs=$'tr'。不是:eq0'; $.eachtrs,函数{ var$this=$this; 如果$this.find'>tdgv-field-15-139'.text='Completed'| | |$this.find'>tdgv-field-15-140'.text='Completed'| | |$this.find'>tdgv-field-15-141'.text='Completed'{ $this.find>tdgv-field-15-150.文本“已完成”; } }; }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 完整的 悬而未决的 悬而未决的 学生乙 中国 悬而未决的 悬而未决的 悬而未决的 循环你的tr,除了第一个tr有th和检查td。虽然你可以用ids解决你的问题,但建议使用类而不是ids

$document.readyfunction{ var trs=$'tr'。不是:eq0'; $.eachtrs,函数{ var$this=$this; 如果$this.find'>tdgv-field-15-139'.text='Completed'| | |$this.find'>tdgv-field-15-140'.text='Completed'| | |$this.find'>tdgv-field-15-141'.text='Completed'{ $this.find>tdgv-field-15-150.文本“已完成”; } }; }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 完整的 悬而未决的 悬而未决的 学生乙 中国 悬而未决的 悬而未决的 悬而未决的
这个解决方案太简单了,甚至不需要jQuery,我还认为如果把逻辑稍微分解一下,阅读它可能会更好,也就是说,我已经实现了isComplete函数,而不是一个丑陋且长的if语句

仅供参考。ID在整个页面中是唯一的,如果可以的话,最好将它们改为类

编辑 在看过@HMR生成的漂亮的解决方案之后,我想我应该在这个解决方案中包含一些优雅的代码,我不能把所有的功劳都归功于此

//只是速记。 const$e=queryString=>document.querySelectorAllqueryString; 常量项=‘已完成’; //返回一个布尔值。 const isComplete=td=>td.textContent.replace/\/,==term; //一些后备功能。 const fallback==>console.log'Next…'; //呈现更新。 const render=v,t=>v.includestrue?t.textContent=term:fallback; //更新相关的td标签。 常数更新=tr=>{ const tds=Array.fromtr.querySelectorAll'td'; 常量[,,…值]=tds.maptd=>isCompletetd; 常数[,td]=tds; 渲染值,td; }; //迭代相关的tr标记。 const loop==>Array.from$etable tr.1、.forEachtr=>updatetr; //开始这个过程。 环 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 完整的 悬而未决的 悬而未决的 学生丙 中国 悬而未决的 悬而未决的 悬而未决的
这个解决方案太简单了,甚至不需要jQuery,我还认为如果把逻辑稍微分解一下,阅读它可能会更好,也就是说,我已经实现了isComplete函数,而不是一个丑陋且长的if语句

仅供参考。ID在整个页面中是唯一的,如果可以的话,最好将它们改为类

编辑 在看过@HMR生成的漂亮的解决方案之后,我想我应该在这个解决方案中包含一些优雅的代码,我不能把所有的功劳都归功于此

//只是速记。 const$e=queryString=>document.querySelectorAllqueryString; 常量项=‘已完成’; //再 转换为布尔值。 const isComplete=td=>td.textContent.replace/\/,==term; //一些后备功能。 const fallback==>console.log'Next…'; //呈现更新。 常量render=v,t=>v.includestrue?t、 text内容=术语:回退; //更新相关的td标签。 常数更新=tr=>{ const tds=Array.fromtr.querySelectorAll'td'; 常量[,,…值]=tds.maptd=>isCompletetd; 常数[,td]=tds; 渲染值,td; }; //迭代相关的tr标记。 const loop==>Array.from$etable tr.1、.forEachtr=>updatetr; //开始这个过程。 环 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 完整的 悬而未决的 悬而未决的 学生丙 中国 悬而未决的 悬而未决的 悬而未决的
有两个问题:

你有重复的身份证。ID必须是唯一的。在当前代码中,您将始终获得第一个具有必要ID的元素。因此,您应该使用类 你不是在循环。因为它是一个表,您必须处理每一行,您必须循环所有行,并且基于当前行,您必须检查/更新必要列的值。 $document.readyfunction{ var$tr=$‘表tr’; $。每个$tr,函数索引,tr{ 如果 $'.gv-field-15-139',tr.text==“已完成”|| $'.gv-field-15-140',tr.text==“已完成”|| $'.gv-field-15-141',tr.text==“已完成” { $.gv-field-15-150,tr.text“已完成”; } } }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 悬而未决的 悬而未决的 悬而未决的
有两个问题:

你有重复的身份证。ID必须是唯一的。在当前代码中,您将始终获得第一个具有必要ID的元素。因此,您应该使用类 你不是在循环。因为它是一个表,您必须处理每一行,您必须循环所有行,并且基于当前行,您必须检查/更新必要列的值。 $document.readyfunction{ var$tr=$‘表tr’; $。每个$tr,函数索引,tr{ 如果 $'.gv-field-15-139',tr.text==“已完成”|| $'.gv-field-15-140',tr.text==“已完成”|| $'.gv-field-15-141',tr.text==“已完成” { $.gv-field-15-150,tr.text“已完成”; } } }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 悬而未决的 悬而未决的 悬而未决的
不要使用重复的id,您可以使用intead单元格的索引:

const table=document.querySelector'table'; //获取除标题以外的所有行 const rows=Array.fromtable.querySelectorAll'tr'.slice 1. ; rows.forEachrow=>{ const cells=Array.from 行。查询选择全部'td' ; //去第三个牢房 常数[,toSet]=单元; //第三个单元格后的所有值 常量[,,…值]=cells.map cell=>cell.innerText.trim//映射到单元格的innerText ; ifvalues。包括“已完成”{ toSet.innerHTML='Completed' } }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 xxx 完整的 悬而未决的 悬而未决的 学生乙 中国 xxx 完整的 悬而未决的 悬而未决的 学生丙 未完成 xxx 悬而未决的 悬而未决的 悬而未决的
不要使用重复的id,您可以使用intead单元格的索引:

const table=document.querySelector'table'; //获取除标题以外的所有行 const rows=Array.fromtable.querySelectorAll'tr'.slice 1. ; rows.forEachrow=>{ const cells=Array.from 行。查询选择全部'td' ; //去第三个牢房 常数[,toSet]=单元; //第三个单元格后的所有值 常量[,,…值]=cells.map cell=>cell.innerText.trim//映射到单元格的innerText ; ifvalues。包括“已完成”{ toSet.innerHTML='Completed' } }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 xxx 完整的 悬而未决的 悬而未决的 学生乙 中国 xxx 完整的 悬而未决的 悬而未决的 学生丙 未完成 xxx 悬而未决的 悬而未决的 悬而未决的
循环表中除第一行以外的所有行,因此=>$'tr'.length-1

.eq函数用于按索引访问每个元素/文本

    $(document).ready(function () {
       for(i=0;i<$('tr').length-1;i++){
           if( ($('td#gv-field-15-139').eq(i).text() == 'Completed') || ($('td#gv-field-15-140').eq(i).text() == 'Completed') || ($('td#gv - field - 15 - 141').eq(i).text() == 'Completed') ) {
            $("td#gv-field-15-150").eq(i).text('Completed');
           }
       }
    });

循环表中除第一行以外的所有行,因此=>$'tr'.length-1

.eq函数用于按索引访问每个元素/文本

    $(document).ready(function () {
       for(i=0;i<$('tr').length-1;i++){
           if( ($('td#gv-field-15-139').eq(i).text() == 'Completed') || ($('td#gv-field-15-140').eq(i).text() == 'Completed') || ($('td#gv - field - 15 - 141').eq(i).text() == 'Completed') ) {
            $("td#gv-field-15-150").eq(i).text('Completed');
           }
       }
    });
ID必须始终是唯一的 重复的ID会使HTML无效,更重要的是,它会削弱JS/jQ,因为预期ID是唯一的,所以一旦找到,就不会继续第二次出现 身份证。

变化 所有ID都已更改为.class 每行的最后3个具有共享类:。状态 每行的第三行都有一个新类:.primary 参考

演示 三行代码…这就是你所需要的。 $'.status'.eachfunction{ 如果$this.text==“已完成”{ $this.prevAll'.primary'.text'Completed'; } }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 完整的 悬而未决的 悬而未决的 学生丙 美国 错误 悬而未决的 悬而未决的 学生D 法国 悬而未决的 悬而未决的 完整的 ID必须始终是唯一的 重复的id会使HTML无效,更重要的是,它会削弱JS/jQ,因为预期id是唯一的,所以一旦找到,就不会继续第二次出现id。

变化 所有ID都已更改为.class 每行的最后3个具有共享类:。状态 每行的第三行都有一个新类:.primary 参考

演示 三行代码…这就是你所需要的。 $'.status'.eachfunction{ 如果$this.text==“已完成”{ $this.prevAll'.primary'.text'Completed'; } }; 学名 国籍 地位 状态1 状态2 状态3 学生A 印度 完整的 悬而未决的 悬而未决的 学生乙 中国 完整的 悬而未决的 悬而未决的 学生丙 美国 错误 悬而未决的 悬而未决的 学生D 法国 悬而未决的 悬而未决的 完整的
不要复制ID,这就是为什么您无法通过第一个ID访问。当JS找到一个id时,它自然会假设这是唯一一个带有该id的标记。将您的id更改为类。不要重复id,这就是为什么您无法通过第一个id访问。当JS找到一个id时,它自然会假设这是唯一一个带有该id的标记。将您的id更改为类。这可能是迄今为止最好的答案,非常好的解决方案!可能是目前为止最好的答案,非常好的解决方案!