使用DOCTYPE时使用JavaScript设置样式的怪异问题

我正在尝试添加< div>使用JavaScript,然后更改其width / height / top / left属性.但是,当我使用XHTML 1 Transitional doctype时,它将停止工作.

这就是我创建< div>的方式:

var div=document.createElement("div");
document.body.appendChild(div);
div.innerHTML='<div id="myID" style="z-index:9998;border: 1px solid #000000;
border-radius:3px;position: absolute; display: block;top:-10000;left:-10000; 
width:400; height:400;"></div>';

因此,最初,myDiv对用户不可见,因为其左侧和顶部不在屏幕外

然后,在某些单击操作中,我正在执行以下操作:

var myDiv=document.getElementById("myID");
myDiv.style.top=200;
myDiv.style.left=200;

如果我不在HTML中放置doctype,则效果很好.一旦我放入doctype,它就会停止工作.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

使用doctype时,它将停止接受top / left / width / height值.但是,如果我使用单位(即px)设置width / height / top / left值,那么它可以正常工作.

myDiv.style.top="200px";
myDiv.style.left="200px";

那么,在修改样式时(或者也可能是其他事情)文档类型对JavaScript执行有什么影响?

解决方法:

即使在不使用doctype的情况下浏览器允许您使用原始数字,从技术上讲也是无效的(当您不使用doctype时浏览器会做很多时髦的事情).

样式属性确实类似于CSS属性,即带有单位的字符串.因此,“ 200px”是正确的,200是不正确的.属性(例如left)可以是lengths(例如“ 200px”或“ 10em”),也可以是percentages(或自动或继承). (这些链接均指向CSS 2.1规范.)

创建myID div时,还需要在字符串中包含单位:

div.innerHTML = '<div id="myID" style="z-index:9998; ' +
    'border: 1px solid #000000; ' +
    'border-radius:3px;' +
    'position: absolute;' +
    'display: block;' +
    'top:-10000px;' +     // here
    'left:-10000px;' +    // here
    'width:400px;' +      // here
    'height:400px;"' +    // and here
    '></div>';
上一篇:Javascript-使用Doctype让scrollTop返回0,为什么?


下一篇:在doctype使浏览器进入怪癖模式之前会有php代码吗?