勾选一个单元格中的复选框,具体取决于同一行级别的另一个单元格中的内容

Posted

技术标签:

【中文标题】勾选一个单元格中的复选框,具体取决于同一行级别的另一个单元格中的内容【英文标题】:Tick checkboxes in one cell depending on content in another at the same row level 【发布时间】:2020-07-31 17:13:23 【问题描述】:

我需要预先选择复选框,以便更改它们的状态。不幸的是,我不是 javascript 人。

循环必须看起来像这样

tick:
td.col-clipboard input.smallCheckboxes
if:
td.col-clipboard (last-child) contains "sometextstring"

请帮忙,否则我必须手动勾选大约 2000 条记录。

可以使用纯 JS 或 Prototype JavaScript 框架(版本 1.7.1)。这是一个较旧的 TYPO3 后端。

非常感谢您!

【问题讨论】:

【参考方案1】:

Prototype.js 让这变得非常简单:

$$('td.col-clipboard input.smallCheckboxes').select(function(elm)
  return elm.up('tr').down('td:last-of-type').innerhtml.include('sometextstring')
).invoke(writeAttribute, 'checked', 'checked');

您可以先选择 TR 来简化它:

$$('tr').map(function(elm)
  if elm.innerHTML.include('sometextstring')
    elm.down('input.smallCheckboxes').writeAttribute('checked', 'checked');
  
);

如果您的 TR 具有类名或表具有 ID,则可以通过更改最外层的 $$(按 CSS 选择器查找全部)方法的参数来匹配初始选择范围。

【讨论】:

【参考方案2】:

我创建了一个示例,检查表格的每一行并将该行中的所有复选框设置为true,如果该行中的最后一个单元格包含预定义的变量:

const rows = Array.from(document.getElementsByTagName('tr'));
const str = 'sometextstring';

rows.forEach(row => 
  const cells = Array.from(row.cells);
  // Find last cell in this row
  const target = cells[cells.length - 1].innerHTML;
  // Compare str to the contents of the cell
  if (target === str) 
    // Set all checkboxes in this row to true except the last one
    for (let i = 0; i < cells.length - 1; i++) 
        cells[i].querySelector('input').checked = true;
    
  
)

我的示例区分大小写。

请在此处找到 jsfiddle:https://jsfiddle.net/sanderdebr/z23mfthc/34/

【讨论】:

以上是关于勾选一个单元格中的复选框,具体取决于同一行级别的另一个单元格中的内容的主要内容,如果未能解决你的问题,请参考以下文章

清除一张纸上一列中每一行的内容,取决于另一张纸上同一行中一列中的更改

当同一行中的另一个单元格在 Javascript 中具有值时,验证一个单元格是不是成为必需的

如果满足 for 循环中的条件,则在同一行中的其他单元格中获取值

如何用jquery将勾中复选框的那一行的数据自动添加到同页面的另一个表格

如何访问 Angular Material Data-Table 中同一行的不同单元格中的单元格的值?

如何使用 Pandas 在 Python 中基于同一行中的另一个单元格设置单元格值