【问题标题】:Delete <tr> whose id contains a specific symbol删除 id 包含特定符号的 <tr>
【发布时间】:2018-02-28 11:23:57
【问题描述】:

我在我的 JSP 页面中取消了 &lt;table&gt;。使用 JavaScript,我想删除所有 id 包含 ;&lt;tr&gt;s。

例如:

<tr id=";1234;">
   ...
   ...
</tr>

必须删除整行。有人可以给我小费吗?

【问题讨论】:

  • 这些是无效的 id 属性,我怀疑大多数浏览器会以 ; 字符开头。
  • 到目前为止,您的代码如何解决您的问题?
  • document.querySelectorAll('[id*=";"]')
  • @E.Maggini 好吧,它们在HTML5 standard 中是有效的,因为它们不包含空格,但如果你在谈论 HTML4 的向后兼容性,那么当然......跨度>

标签: javascript html


【解决方案1】:

document.querySelectorAll('tr[id*=";"]').forEach(node =&gt; node.remove());
<table>
  <tr id=";1234;">
    <td>Remove Me</td>
  </tr>
  <tr>
    <td>Keep Me</td>
  </tr>
</table>

【讨论】:

    【解决方案2】:

    您可以通过执行以下 sn-p 以编程方式删除所有 id 中包含 ;&lt;tr&gt; 元素:

    Array.from(document.querySelectorAll('tr[id*=";"]')).forEach(tr => {
      tr.remove()
    })
    

    以下链接供参考:

    【讨论】:

    【解决方案3】:

    执行此操作的最简单方法如下,并且兼容跨浏览器(非 ECMA6)。

    https://jsfiddle.net/dfju8xn8/1/

    <table>
    <tr id=";1234;">
    <td>foo</td>
    </tr>
    
    <tr id="yadayada">
    <td>moo</td>
    </tr>
    </table>
    

    和Javascript

    var myElements = document.querySelectorAll('tr[id*=";"]');
    
    for (var xx = 0; xx < myElements.length; xx++) {
       myElements[xx].outerHTML ='';
    }
    

    附言为了便于阅读,您应该使用上述方法之一。如果您将不得不对大型结果集进行迭代,请考虑将 for 循环测试为执行得更快。

    【讨论】:

    • myElements[xx].parentNode.removeChild(myElements[xx]); 更好。
    • @Xufox 你能解释一下为什么吗?您需要调用父节点,然后调用函数。我的直接擦除所需的 HTML 块。
    • 设置innerHTMLouterHTML 不仅仅是简单的字符串操作或属性访问。之后会发生大量 DOM 解析,这可能比简单的 DOM 节点删除要慢。还有accidentally killing event listeners 的可能问题。您可以也使用myElements[xx].remove(),但您说的是跨浏览器兼容性。 outerHTML 实际上有其自身的兼容性问题,removeremoveChild 是一种更直观的方法来处理这里所做的事情。
    • 感谢您的澄清 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2022-11-18
    相关资源
    最近更新 更多