bgcolor和bgColor?

      那天大众点评在线笔试遇到一道WEB前端题,具体不说明,主要是在用背景色时发现了bgcolor和bgColor的区别。我本是做后台的,正打算入门写前端(之前仅会看),发现这个区别让我对前端工作更加敬畏。

  废话不说,这两个简单说都是设置某些标签背景颜色的,一个是静态(属HTML),一个是动态(属JSript)。区别通过举例使用很容易发现,只是想借区别来谈谈浏览器、兼容性。

  我本来想用bgcolor设置<td>标签的背景色,如下:

  <html><head></head><body>

  <table>

  <tr><td bgcolor="#000"></td></tr></table>

  </body></html>

  这种做法是毫无疑问没什么问题,只是要注意的是,IE浏览器(我用的8,调试的文本模式用默认quirks)下table是自动解析生成了tbody的,因为此IE识别不了无tbody的表格。而我实际是这样写的:

  <html><head></head><body>

  <div id="test"></div>

  <script type="text/javascript">

  var a;

  var nodea, noder, noded, nodeb;

  a = document.getElementById("test");

  nodea = document.createElement("table");

  nodea.setAttribute("border","1");

  nodeb = document.createElement("tbody");  //如果不创建tbody就会出现IE不能识别,后面细说

  nodea.appendChild(nodeb);

  noder = document.createElement("tr");

  noded = document.createElement("td");

  noded.setAttribute("bgcolor","#000");  //这样IE就不会有背景色,正确写法noded.bgColor = "#000";

  noded.innerHTML = "test"

  noded.setAttribute("bordercolor","#000");
      noded.setAttribute("height","40");
      noded.setAttribute("width","40");
      noder.appendChild(noded);
      nodeb.appendChild(noder);
      a.appendChild(nodea);

  </script>  

  </body></html>

  这样写后会出现表格内只有"test"文本,而没有背景颜色(黑色),这是由于bgcolor是设置静态色,但我不是直接写HTML标签来设置,而是用JS脚本动态创建表格然后设置属性,我之前一直没弄懂为什么动态设置bgcolor就不能成功,后来知道了有bgColor,用于动态设置背景颜色,这样才能成功设置背景色(黑色)。

  同样问题,为什么我在静态创建表格是不用写tbody,我的IE浏览器也能识别?而动态因为没有创建tbody就不能识别。这跟浏览器的执行是密切相关的。

    这里我们不太复杂去讨论HTML/JScript/JAVASCRIPT的执行顺序或过程,就bgcolor,它首次被动态设置后,浏览器不解析而言,就知道在我用的IE中,bgcolor一定解析在脚本语言之前,其他属性我不清楚,像这些属性IE8浏览器不会在首次解析后再去解析静态设置,这就说明这类属性的效果,可能跟其他执行有关(渲染?浏览器本身漏洞?),至今还未去深入研究。还请知道的大神能做出解答。

  

原文地址:https://www.cnblogs.com/iwish/p/3358862.html