为什么注释会影响我的文件的逻辑?

时间:2015-03-03 18:22:58

标签: javascript html5 comments

编辑:

在这里,它显示这是一个评论。在我的IDE中,它将此视为代码。太奇怪了(代码集#2):

<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>

我有两个文件。一个有评论,一个没有。第一组代码功能完美。第二组代码在JavaScript控制台中告诉我Uncaught ReferenceError: $ is not defined,并且不调用警报。为什么评论会影响我的脚本?

代码集#1

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>
</head>
<body>
<script>
    $(function () {
        alert("JQUERY!");
    });
</script>
</body>
</html>

代码集#2

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>
    <![endif]-->
</head>
<body>
<script>
    $(function () {
        alert("JQUERY!");
    });
</script>
</body>
</html>

5 个答案:

答案 0 :(得分:5)

这些不是普通的评论,而是有条件的评论。 请参阅:http://www.quirksmode.org/css/condcom.html

以上评论评论所有javascript包含,因此它们不会被加载,除非Internet Explorer低于版本9。

您收到错误消息,因为未加载jquery(它位于HTML注释中)。如果您使用例如IE8出现了错误。

答案 1 :(得分:2)

<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>
<![endif]-->

if构造有一个用于IE的conditional comment

只有当您使用版本号大于9的IE时,才会呈现脚本标记。每个其他浏览器都会将整个部分视为单个注释,而不包含任何该javascript。

答案 2 :(得分:1)

您的文件希望加载jQuery。看来你注释掉了jQuery脚本,你必须包含jQuery脚本,取消注释:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

答案 3 :(得分:0)

它不会被浏览器运行吗?它只会在服务器流式传输的每种情况下,并由客户端下载。

只要您没有太多字符

,它就不会有任何区别

虽然动态页面是在服务器端生成的,但您可能必须使用服务器端注释,例如:&lt;% - comment - %&gt;或{%comment%}

答案 4 :(得分:0)

<!--[if lt IE 9]>&amp; <![endif]-->是对IE的条件评论。其他浏览器会将它们作为注释读取。如果您使用的是晚于9的IE版本,则会加载这些脚本,这可能会导致与其他脚本冲突。