选中基于不同 div 后面的文本的复选框?

Check a checkbox based on text that follows in a different div?

有没有办法根据复选框后面的文本来检查复选框?工作中的一个应用程序需要我根据后面的文本检查很多框。似乎可以通过编程方式完成,但这绝对超出了我的有限知识范围

这是页面的一个模糊片段。

  <tr>
    <td><span title="original"><input id="a0" type="checkbox" name="orginal_a0" value="0"><label for="a0">
          <div class="List">
            <div>
              <div>Default Thing</div>
            </div>
          </div>
        </label></span></td>
  </tr>
  <tr>
    <td><span title="original"><input id="a1" type="checkbox" name="original_a1" value="1"><label for="a1">
          <div class="List">
            <div>
              <div>New Thing</div>
            </div>
          </div>
        </label></span></td>
  </tr

我知道我可以根据输入的 ID 或名称,但不幸的是,它们无法帮助确定我是否应该选中该框。重要的是框后面的文本。如果我能做到,它会选中任何以“New”或任何其他文本开头的框,但也不选中以“Default”开头的框。因此,在上面的示例中,我将选中第二个框而不选中第一个框。在应用程序中,它通常选中 50-75 个框,但未选中类似数量的框。理想情况下,我可以将其输入控制台或制作成书签。

这可能吗?

您可以遍历所有单元格,检查文本是否不以 default 开头并将 checked 状态设置为 input

附带说明,最好不要将 div 元素嵌套在 spanlabel

等内联元素中

const td = document.querySelectorAll('td');
[...td].forEach((cell) => {
  const text = cell.textContent.trim();
  if (!text.match(/^default/i)) {
    cell.querySelector('input').checked = true;
  }
});
<table>
  <tr>
    <td>
      <span title="original">
        <input id="a0" type="checkbox" 
               name="orginal_a0" value="0">
        <label for="a0">Default Thing</label>
      </span>
    </td>
  </tr>
  <tr>
    <td>
       <span title="original">
         <input id="a1" type="checkbox" 
                name="original_a1" value="1">
         <label for="a1">New Thing</label>
       </span>
    </td>
  </tr>
</table>

此示例遍历所有复选框并抓取下一个元素,假定为标签。如果指示的 div 不是以“默认”开头,它将选中该框。

const allCheckboxes = document.querySelectorAll("input[type='checkbox']");

for (let checkbox of allCheckboxes) {
  // get the label element and locate the appropriate div within
  let appropriateDiv = checkbox.nextElementSibling.querySelector("div.List div div");
  if (appropriateDiv && !appropriateDiv.innerText.startsWith("Default")) {
    checkbox.checked = true;
  }
}
<table><tbody>
<tr>
    <td><span title="original"><input id="a0" type="checkbox" name="orginal_a0" value="0"><label for="a0">
          <div class="List">
            <div>
              <div>Default Thing</div>
            </div>
          </div>
        </label></span></td>
  </tr>
  <tr>
    <td><span title="original"><input id="a1" type="checkbox" name="original_a1" value="1"><label for="a1">
          <div class="List">
            <div>
              <div>New Thing</div>
            </div>
          </div>
        </label></span></td>
  </tr>
</tbody></table>