如果注释掉,.getElementById()找不到HTMLElements - 这是正常行为吗?

时间:2014-08-01 05:33:49

标签: javascript html

我试图查看.hasAttribute()方法返回的类型。我有以下代码:

HTML:
<!--
<img id="theimg" src="http://placehold.it/100x100">
-->

JS:
var myimg = document.getElementById("theimg");
var result = myimg.hasAttribute('src');
console.log(typeof result);

我的控制台不断抛出此错误:Uncaught TypeError: Cannot read property 'hasAttribute' of null

有趣的是,一旦我取消评论HTML,myimg不再为空,.hasAttribute('src');兴高采烈地返回一个布尔值。

由于.getElementById()似乎没有找到注释掉的HTMLElements,如何检索注释掉HTMLElements?

我试过了:

  1. 按摩代码以查看我是否可以强制.getElementById()工作,例如通过尝试console.log(document.getElementById("theimg").src);
  2. 谷歌搜索
  3. .getElementById()上阅读the MDN Documentation,只是说
  4.   

    &#34;如果没有给定id的元素,则返回此函数   null ...不会搜索文档中没有的元素   的getElementById&#34;

    但肯定是注释掉的文字是文件的一部分!

    搜索我找到了this question about accessing a hidden form,但它没有回答我的问题。

2 个答案:

答案 0 :(得分:2)

是的,这很正常。像你的问题一样荒谬,它值得一个真正的答案:你评论的任何内容都会作为注释节点插入到DOM中,并且不算作标记。注释是 nothing ,就像隐藏的表单元素一样:第一个不是DOM节点,而是注释数据。第二个是一个真正的DOM节点,如果你对它应用了CSS,例如display: block,它会像其他任何东西一样显示在页面上。

我称这个问题很荒谬,因为它是HTML标记最基本的规则之一。 HTML做的事情,如果你评论它,它什么都不做,就任何人而言,除了你查看源代码时,它都不存在。

答案 1 :(得分:-1)

您的console.log()方法

中有错误

你应该连接字符串,只需在字符串和变量之间添加一个+。

我像这样测试它并且它起作用了

<img id="theimg" src="http://placehold.it/100x100"> 
<script type="text/javascript">
var myimg = document.getElementById("theimg");
var result = myimg.hasAttribute('src');
console.log("type is "+ result);
</script>