【问题标题】:Removing a paticular html tag from a page从页面中删除特定的 html 标记
【发布时间】:2015-10-26 05:34:07
【问题描述】:

我需要从我的 html 页面中找到并删除这个特殊的标签:

<div style="margin-top: 15px;">Access Denied</div>

我该如何做到这一点?我看过以下内容

但我仍然不明白如何从当前整个 html 文档中找到并删除与此字符串匹配的确切标签。

有什么办法吗?

谢谢。

编辑: 我只能修改:`

的内容
<div style="height: 200px;width: 500px; overflow: auto;" id="message">

` 这是页面加载时的整个 html 文档:

<html>
    <head>
        <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
            <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
                <title>Access Denied</title>
                <style type="text/css">.accessdeniedtextfont{FONT-WEIGHT: bolder;FONT-SIZE: 12px;COLOR: #565656;FONT-FAMILY: arial,san-serif;TEXT-DECORATION: none}.accessdeniedcategoryfont{font-weight:bold;  FONT-SIZE: 12px;COLOR: #336699;FONT-FAMILY: verdana,arial,san-serif;TEXT-DECORATION: none}</style>
                <meta http-equiv="Content-Language" content="en-us">
                    <script src="/javascript/validation/DefaultDeniedMessagePreview.js" type="text/javascript"/>
                </head>
                <body style="background: #FFFFFF;font-family: Arial;font-size: 12px;font-weight: bold;color: #565656;">
                    <form name="previewform">
                        <table width="100%">
                            <tbody>
                                <tr>
                                    <td align="center">
                                        <div style="background: #FFFFFF;margin-top: 9%;box-shadow: 0px 0px 10px #666666;border: 1px solid #CCCCCC;width: 600px;;height:auto">
                                            <table width="100%" cellspacing="0" cellpadding="0" align="center" style="text-align: left;">
                                                <tbody>
                                                    <tr>
                                                        <td height="15px" colspan="5">&nbsp;</td>
                                                    </tr>
                                                    <tr>
                                                        <td width="7%">&nbsp;</td>
                                                        <td style="color: #B02B2E;font-size: 20px;font-weight: bold;" colspan="2">
                                                            <div style="margin-top: 15px;">Access Denied</div>
                                                        </td>
                                                        <td height="75" align="right">
                                                            <img width="125" height="70" onload="callToSetImageSize(this)" src="/images/customizeimages/denied_topbar.jpeg?v=1445858787891" name="headerimage" id="headerimage">
                                                            </td>
                                                            <td width="7%">&nbsp;</td>
                                                        </tr>
                                                        <tr>
                                                            <td align="center" colspan="5">
                                                                <div style="width: 98%;height: 2px;margin-bottom: 5px;text-align: center;border-top: 1px solid #CCCCCC;"/>
                                                            </td>
                                                        </tr>
                                                        <tr>
                                                            <td>&nbsp;</td>
                                                            <td height="30px" colspan="3">
                                                                <div style="height: 200px;width: 500px; overflow: auto;" id="message">
                                                                    <script type="text/javascript">&lt;br/&gt;var divs = document.querySelectorAll("div");&lt;br/&gt;&lt;br/&gt;for (var i = 0; i &lt; divs.length; i++) {&lt;br/&gt;  if (divs[i].textContent === "Access Denied") {&lt;br/&gt;    divs[i].parentNode.removeChild(divs[i])&lt;br/&gt;  }&lt;br/&gt;}&lt;br/&gt;</script>
                                                                    <br>
                                                                        <br>
                                                                            <font class="accessdeniedtextfont">
                                                                                <b>
                                                                                    <br>Hello </b>
                                                                                </font><b>
                                                                                    <font class="accessdeniedcategoryfont">{usr},</font>
                                                                                    <br>
                                                                                        <br>
                                                                                            <br>
                                                                                                <font class="accessdeniedtextfont">This site is unavailable at this time<br>
                                                                                                        <br>The page you are trying to access:</font>
                                                                                                        <font class="accessdeniedcategoryfont">{url}</font>
                                                                                                        <br>
                                                                                                            <font class="accessdeniedtextfont">is unavailable. <br>
                                                                                                                    <br>
                                                                                                                        <br>
                                                                                                                            <font class="accessdeniedtextfont">Good bye<br>
                                                                                                                                </font>
                                                                                                                            </font>
                                                                                                                        </b>
                                                                                                                    </div>
                                                                                                                </td>
                                                                                                                <td>&nbsp;</td>
                                                                                                            </tr>
                                                                                                            <tr>
                                                                                                                <td align="left" colspan="5">
                                                                                                                    <div style="width: 98%;height: 60px;margin-bottom: 5px;border-top: 1px solid #CCCCCC;margin-top: 25px;margin-left: 5px;">
                                                                                                                        <table>
                                                                                                                            <tbody>
                                                                                                                                <tr>
                                                                                                                                    <td>
                                                                                                                                        <img width="70" height="60" onload="callToSetImageSize(this)" src="/images/customizeimages/denied_bottombar.jpeg?v=1445858787891" name="footerimage" id="footerimage">
                                                                                                                                        </td>
                                                                                                                                        <td align="center">
                                                                                                                                            <a style="margin-left: 95px;color:#6E400F;font-weight: bold;font-size: 12px;display: none;" id="knowmorelink" href="#">Cyberoam is securing you. Click here to know more.</a>
                                                                                                                                        </td>
                                                                                                                                    </tr>
                                                                                                                                </tbody>
                                                                                                                            </table>
                                                                                                                        </div>
                                                                                                                    </td>
                                                                                                                </tr>
                                                                                                            </tbody>
                                                                                                        </table>
                                                                                                    </div>
                                                                                                </td>
                                                                                            </tr>
                                                                                        </tbody>
                                                                                    </table>
                                                                                </form>
                                                                                <script type="text/javascript">
    initDefaultDeniedMessagePreview();  
    setLabelValue();
                                                                                </script>
                                                                            </body>


                                                </html>

【问题讨论】:

  • 如果使用 jQuery $('div:contains("Access Denied")').remove();
  • 谢谢。这很有帮助,但我不能在这里使用 jquery .. :(
  • @JackMichael 为什么不呢? jQuery 很棒!
  • 这是我的防火墙设置中的拒绝访问页面,只有页面的正文是可修改的。此访问被拒绝固定在页面的头部。
  • 你控制 HTML 吗?如果你这样做了,那么你应该向元素添加一个类或 id。为divs 搜索整个文档并查看其内容是非常低效的。它也很脆;如果您决定将文本更改为“您无权访问此页面”怎么办?

标签: javascript html dom


【解决方案1】:

尝试使用document.querySelectorAll("div") 选择所有div 元素。使用 for 循环检查每个 div 元素是否有 .textContent 匹配 "Access Denied" ,如果找到匹配则使用 .removeChild() 删除节点

var divs = document.querySelectorAll("div");

for (var i = 0; i < divs.length; i++) {
  if (divs[i].textContent === "Access Denied") {
    divs[i].parentNode.removeChild(divs[i])
  }
}
&lt;div style="margin-top: 15px;"&gt;Access Denied&lt;/div&gt;

【讨论】:

  • 打败我!也喜欢textContent的使用:我没用过(我用过innerHTML),我只是搜索了一下,纯文本比较好。我们每天都能学到一些东西!
  • @JackMichael 如果 div 具有文本“拒绝访问”仅是文档中的 div,其 style 属性以 "margin-top" 开头可以将选择器 div = document.querySelector("div[style^=margin]"); 替换为 document.querySelectorAll("div"); ,然后调用 @ 987654336@
  • 它适用于普通的 html 页面或 jsfiddle。通过 :( 在我的防火墙上不起作用。没有控制台错误,但就是不这样做。可能是因为它在 body 标签内的 div 内?
  • @JackMichael 可以在问题中包含完整的html 文档吗? “无法通过“在我的防火墙上运行”js 在哪里删除调用的元素?
  • @guest271314 我已经编辑了问题并添加了完整的 HTML
【解决方案2】:

您可以使用 XPath 处理该元素:

//div[text() = 'Access Denied']

然后您可以使用document.evaluate 找到该元素并将其删除。

如果重要的话,这可能比自己迭代所有 div 更快。

对于仍在学习 XPath 的人来说,双斜杠 (//) 意味着在任何地方、任何级别查找匹配项。 div 部分显然意味着查找标记名为“div”的元素。方括号 ([]) 中的部分是缩小要选择的 div 的条件。

这里是一些示例代码:

var divs, div, xpath = "//div[text() = 'Access Denied']";

divs = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null); 
while (div = divs.iterateNext()) div.parentNode.removeChild(div);

document.evaluate 上的MDN page 提供了一些优化建议。

【讨论】:

  • 使用 document.evalute 的 javascript 代码看起来如何?
猜你喜欢
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 2014-01-11
相关资源
最近更新 更多