代码之家  ›  专栏  ›  技术社区  ›  Elfen Dew

如何使用JavaScript最有效地删除HTML表行中不同元素中的文本?

  •  0
  • Elfen Dew  · 技术社区  · 9 年前

    到目前为止,我有一个 <table> 有很多 <tr> 表行。每行中有两个单元格( <td> <td>

    <tr>
      <td class="codecol">
          <input type="checkbox">
          <a title="I&amp;C SCI 33" onclick="return showCourse(this, 'I&amp;C SCI 33');">I&amp;C SCI 33</a>
      </td>
      <td>Intermediate Programming</td>
    </tr>
    

    但是,如果选中了复选框,我想删除链接和文本描述(如果未选中,则取消排序)。因此,我编写了一个JS函数,如下所示:

    function checkStrikethrough(checkboxElemnt, rowData) {
        //strikethrough text if checked
        if (checkboxElemnt.checked) {
            for(var i = 0; i < rowData.length ; i++) {
                var elemnt = document.getElementById(rowData[i]);
                elemnt.style.setProperty("text-decoration", "line-through");
            }
        }
        // normal text if not checked
        else {
            for(var i = 0; i < rowData.length ; i++) {
                var elemnt = document.getElementById(rowData[i]);
                elemnt.style.setProperty("text-decoration", "none");
            }
        }
    }
    

    我遇到的问题是HTML文件中更改的硬编码:id作为参数传递。有这么多行,我开始怀疑是否有比这样修改更好的方法:

    <tr>
      <td class="codecol">
          <input type="checkbox" onchange='checkStrikethrough(this, ["icsci33Link", "icsci33Td"]);'>
          <a id="icsci33Link" title="I&amp;C SCI 33" onclick="return showCourse(this, 'I&amp;C SCI 33');">I&amp;C SCI 33</a>
      </td>
      <td id="icsci33Td">Intermediate Programming</td>
    </tr>
    
    <tr>
      <td class="codecol">
          <input type="checkbox" onchange='checkStrikethrough(this, ["icsci45cLink", "icsci45cTd"]);'>
          <a id="icsci45cLink" title="I&amp;C SCI 45C" onclick="return showCourse(this, 'I&amp;C SCI 45C');">I&amp;C SCI 45C</a>
      </td>
      <td id="icsci45cTd">Programming in C/C++ as a Second Language</td>
    </tr>
    

    1 回复  |  直到 9 年前
        1
  •  0
  •   Jorge Valle    9 年前

    <input type="checkbox" onchange="checkStrikethrough(this)">
    

    JS公司

    function checkStrikethrough(element) {
    
      var elementToDelete = element.parentElement.nextElementSibling; // traversing the DOM, moving up to parent td, then on to next sibling td
    
      element.checked ? elementToDelete.style.color = 'red': elementToDelete.style.color = 'black';
    
    }
    

    请记住,此解决方案要求HTML结构在表行的所有迭代中保持不变。另外,我只是在改变JS中的字体颜色:现在你知道如何定位元素了,你可以随心所欲地设计风格。