Javascript 到 html 替换标签不起作用

标签 javascript html css

我一直在努力替换在我的网站上发布但对我不起作用的所有代码。 我需要 <pre><code></code></pre> 中出现的所有内容重放所有标签并使用 css 为其指定颜色。请问,如果有任何简单的方法可以做到这一点,有人可以帮助我吗?我会欣赏 jsfiled 中的示例代码

这是我一直在尝试使用的代码示例

function Rep(text){
  text = text.replace(/ /g,"&nbsp;");

  text = text.replace(/<([^\>]+?)>/g, function(match, contents){
      return "<span class='TagColor'>&lt;"+contents+"&gt;</span>";
  }  
  );

  text = text.replace(/\"([^\"]+?)\"/g, function(match, contents){
      return '<span class="StringColor">&quot;'+contents+'&quot;</span>';
    }  
  );
  text = text.replace(/\(([^\)]+?)\)/g, function(match, contents){
      return '<span class="OptionsColor">('+contents+')</span>';
    }  
  );
  text = text.replace(/\n/g, function(match, contents){
      return '<br />';
  }  
  );
  text = text.replace(/\{/g, function(match, contents){
      return '<span class="BracketsColor">&#123;</span>';
  }
  );
  text = text.replace(/\}/g, function(match, contents){
      return '<span class="BracketsColor">&#125;</span>';
  }
  );
  text = text.replace(/\/\*([^\*]+?)\*\//g, function(match, contents){
      return "<span class='CommentColor'>/*"+contents+"*/</span>";
  }  
  );
    text = text.replace(/\[\](.*?)\[\/\]/g, function(match, contents){
      return '<span class="BBColor">'+contents+'</span>';
  }
  );
  return text;

}

//HTML replace
//==================================================
$('code').each(function(){
    var text=$(this).html().replace(/</g,'&lt;');
    var text=text.replace(/>/g,'&gt;');
    $(this).html(text);
});

//google-code-prettify
//==================================================
jQuery(window).load(function(){
    prettyPrint();
});

//Still on Text format                                                                                                                

var app = angular.module('codelab',[],['$interpolateProvider',
    function($interpolateProvider) {
        $interpolateProvider.startSymbol('[[');
        $interpolateProvider.endSymbol(']]');
        }]);

app.directive('ngPrism',['$interpolate', function ($interpolate) {
        "use strict";
        return {
          restrict: 'E',
          template: '<pre id="Mpreditor" class="code code-codes language-javascript"><code ng-transclude="ng-transclude" class="language-javascript"> </code></pre>',
          replace:true,
          transclude:true
        };
    }]);

这是代码在我的网站中的显示方式

    <pre id="Mpreditor" class="code code-codes language-javascript">
    <code ng-transclude="ng-transclude" class="language-javascript">    
<span>Hello</span>
You have to include the `%` signs in the `$params`, not in the query:

        $query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
        $params = array("%$var1%", "%$var2%");
        $stmt = $handle-&gt;prepare($query);
        $stmt-&gt;execute($params);
        </code></pre>

最佳答案

您应该尝试使用一些库,而不是尝试自己实现它。

在开始之前需要考虑一些事情。

  1. 将您的实际代码存储在 <script> 中标签,任何其他标签都会强制浏览器解析可能导致代码修改的内容,如 HTML
  2. 不要将代码附加到容器中 HTML但是textNode与第一点的原因相同

我已经使用此 https://highlightjs.org/usage/ 实现了一个示例下面的库。

	<html>
	<head>
		<script   src="https://code.jquery.com/jquery-2.2.4.min.js"   integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="   crossorigin="anonymous"></script>
		
		<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.4.0/styles/default.min.css">
		<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.4.0/highlight.min.js"></script>

	<script class="testCode" type="text/code" lang="sql">
	SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?
	</script>

	<script class="testCode" type="text/code" lang="html">
	<html>
	  <head>
	  
	  </head>
	  <body>
		<h1>Hello World!</h1>
	  </body>
	</html>
	</script>

	<script class="testCode" type="text/code" lang="java">
	public class Test {
		public static void main (String[] args) {
			System.out.println("Hello World!");
		}
	}
	</script>

	</head>
	<body>
	<div id="codeContainer">
	</div>

	<script>
		//create code blocks
		var codes = $("script.testCode");
		var container = $("#codeContainer");
		
		codes.each(function () {
			var code = $(this);
			var html = code.html();
			var language = code.attr("lang");
			var codeBlock = $("<pre><code class='" + language + "'></code></pre>");
			codeBlock.find("code").text(html);
			container.append(codeBlock);
		});
	</script>
	<script>
	hljs.initHighlightingOnLoad();
	</script>


	</body>
	</html>

关于Javascript 到 html 替换标签不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37688191/

相关文章:

javascript - 显示几秒钟后如何隐藏django消息

javascript - 使用 Regex 提取 GOTO/GOSUB 的行号

javascript - 如何将 float 格式化为两位数

html - 如何居中我的 DIV,它不会去

javascript - 如何在 window.location 之前显示 msg 2 秒

html - 图像悬停时垂直居中和动画图标

javascript - 为什么应该使用 "apply"?

HTML 背景固定位置

html - 使多个居中图像响应

css - 可以重复使用类型选择器来提高特异性吗?