【问题标题】:Display HTML markup in browser without it being rendered在浏览器中显示 HTML 标记而不呈现它
【发布时间】:2023-04-04 02:46:02
【问题描述】:

开始实现 Javascript,我需要进行故障排除,并希望将 HTML 输出到屏幕而不呈现它。我可以通过

访问元素(在 IE 中)
document.getElementById("test").outerHTML

我认为,但我无法证明我要确定的内容。

那么我该怎么做才能让 document.write 显示整个元素,包括标签?

【问题讨论】:

  • 您可以将其可见性设置为隐藏或显示样式为无
  • “将元素输出到屏幕”到底是什么意思?
  • 小心使用 document.write - 在页面完成解析后您不能使用它,否则您将清除页面上的所有其他内容。您应该使用 DOM 操作方法(如您在示例中所示)向页面添加新内容。
  • 他的意思是 outerHTML 返回的内容,标记本身。

标签: javascript debugging outerhtml


【解决方案1】:

你的意思是你想要文字,例如,<b>Hello</b> 而不是 Hello

如果是这样,请快速操作:

myHTML = myHTML.replace(/[<>&\n]/g, function(x) {
    return {
        '<': '&lt;',
        '>': '&gt;',
        '&': '&amp;',
       '\n': '<br />'
    }[x];
});

在输出之前。您可以将此应用于许多其他字符,例如,如果您想按字面意思输出空格。

【讨论】:

    【解决方案2】:

    做两件事(所有这些,而不仅仅是一件):

    1. 用实体替换 HTML 标记:HTML.replace(/&amp;/g, '&amp;amp;').replace(/&lt;/g, '&amp;lt;') 就足够了。
    2. 将其包装在&lt;pre&gt;&lt;/pre&gt; 标记中,这样空格就不会被消除,而是以等宽字体显示。

    您也可以alert(HTML)。在 Windows 上的 IE 中(至少)你可以按 Ctrl-C 并将对话框的文本内容粘贴到其他地方以清楚地看到它。

    两次串行替换比使用函数作为replace() 的第二个参数更快。当字符串很长时,三个串行替换也更快,正如人们对完整 HTML 文档所期望的那样。

    另外,使用document.write 可能不是最好的方法。如果您有一个 id 为 output 的 div,您可以通过以下方式访问它:

    document.getElementById('output').innerHTML = '<pre>' + document.body.innerHTML.replace(/&/g, '&amp;').replace(/</g, '&lt;') + '</pre>';
    

    以上代码有效,我在 IE 和 Firefox 中使用 FireBug 对其进行了测试。请注意,Firefox 不支持 outerHTML

    【讨论】:

      【解决方案3】:

      如果您刚开始使用 javascript,那么现在是学习不要接触不可靠属性的最佳时机; outerHTML 就是其中之一; IE、Chrome 和 Opera 都支持,Firefox 不支持。

      采用原始代码,这将起作用:

      var content = document.getElementById("test").outerHTML;
      var safe = content.replace(/</g,"&lt;").replace(/>/g,"&gt;");
      docuemnt.write(safe);
      

      但是,尽管使用“outerHTML”是个坏主意,“document.write()”也是如此。在你的页面上有一个带有 id 的 div 并在那里设置文本要好得多,而不是“当 document.write() 被调用时你的代码恰好在哪里”:

      <html>
        <head>...</head>
        <body>
          ...
          <div id="mylog"></div>
          ...
       <body>
      </html>
      

      然后用任一填充它:

      // set the content for div 'mylog'
      document.getElementById("mylog").innerHTML = content;
      

      或者使用 jQuery 之类的东西,它为您提供了一个 API,可以隐藏所有疯狂的可能支持或可能不支持的东西,并保证如果您调用它,它会起作用:

      // get html content
      var content = $("#test").html();
      // make it print safe
      var safe = content.replace(/</g,"&lt;").replace(/>/g,"&gt;");
      // add it to the log as text
      $("mylog").append(safe);
      

      【讨论】:

      • 谢谢。我使用 div 来输出实际代码,我只是在寻找一个调试工具来看看情况如何。在我掌握了 Javascript 之后,我将进入 JQuery。
      【解决方案4】:

      如果问题不限于 IE,请使用 firefox 并使用firebugconsole.log 非常方便。您可以随时使用alert(myString),但很快就会变得非常烦人。

      【讨论】:

        【解决方案5】:

        如果这只是为了测试并且你想快速暴力破解它,你可以将字符串中的每个字符转换为它的 等效:

        var a = "<div>hello</div>";
        
        var b = a.replace(/./g, function(e){
            return "&#"+e.charCodeAt(0)+";";
        });
        
        document.write(b);
        

        现场示例:http://jsfiddle.net/J89wh/

        【讨论】:

          【解决方案6】:

          这是我找到的一种快速简便的方法

          1.下载并安装 Adob​​e DreamWeaver,您将获得 30 天试用期。

          2.在Dream weaver的设计界面中写下你想放入网站的代码

          3.在代码屏幕中,您将获得一个代码,用于将未渲染的 html 代码放入您的网站。

          例如: 当我放代码时:

          <p>This is a paragraph</p>
          

          在DreamWeaver的设计窗口中。在代码窗口中,编写了以下代码。

          <p>&lt;p&gt;This is a paragraph&lt;/p&gt;</p>
          

          您可以对您希望在浏览器中显示为未呈现的每个代码执行此操作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-22
            相关资源
            最近更新 更多