用IE兼容脚本替换setAttribute

时间:2013-03-11 00:06:12

标签: javascript html setattribute

我正在尝试创建一个弹出消息,在您确认之前禁用屏幕的其余部分,仅使用CSS和JavaScript (并且不使用alert功能)。

虽然http://msdn.microsoft.com/en-us/library/ie/ms536739%28v=vs.85%29.aspx声明IE8及更高版本支持setAttribute,但它似乎无法正常工作 - 实际上它似乎根本不起作用。

这是我的代码:

<html>

<style type="text/css">

.overlay
{
position: absolute;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.2);
}

.overlaytext
{
position: absolute;
left: 50%;
margin-left: -150px;
top: 50%;
margin-top: -50px;
width: 300px;
height: 100px;
padding-top: 5px;
background-color: #777777;
color: #000000;
font-size: 20px;
text-align: center;
}

.overlaybutton
{
position: absolute;
left: 50%;
margin-left: -30px;
top: 50%;
margin-top: 20px;
width: 60px;
height: 25px;
border: solid;
border-color: #000000;
border-width: 1px;
background-color: #999999;
color: #000000;
font-size: 20px;
}

</style>

<script type="text/javascript">

function showoverlay(message)
{
var overlay = document.createElement('div');
overlay.setAttribute('id','overlay');
overlay.setAttribute('class','overlay');
document.body.appendChild(overlay);

var overlaytext = document.createElement('div');
overlaytext.setAttribute('id','overlaytext');
overlaytext.setAttribute('class','overlaytext');
overlaytext.innerHTML = message;
document.body.appendChild(overlaytext);

var overlaybutton = document.createElement('input');
overlaybutton.setAttribute('type','button');
overlaybutton.setAttribute('id','overlaybutton');
overlaybutton.setAttribute('class','overlaybutton');
overlaybutton.setAttribute('value','OK');
overlaybutton.setAttribute('onclick','deleteoverlay()');
document.body.appendChild(overlaybutton);
}

function deleteoverlay()
{
var elem = document.getElementById('overlay');
elem.parentNode.removeChild(elem);
elem = document.getElementById('overlaytext');
elem.parentNode.removeChild(elem);
elem = document.getElementById('overlaybutton');
elem.parentNode.removeChild(elem);
}

</script>

<body>

<input type="button" value="Show message" onclick="showoverlay('Message text')"/>

</body>
</html>

它在Firefox和Chrome中工作正常,但IE(使用IE9测试)似乎忽略了setAttribute方法,因为它只放入文本和按钮,但没有格式化(即{{1没有应用)并且还单击新创建的按钮不会删除对象(即,未应用class或者删除对象的代码部分存在一些额外的不兼容性。)

我试图像这样替换id

setAttribute

但这次它甚至没有添加文字和按钮。

那么,如何使这个脚本IE兼容,既显示所有元素,又删除它们?

由于

3 个答案:

答案 0 :(得分:7)

将此作为您的doctype

<!DOCTYPE html>

然后把它放在文件的头部

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

然后享受使用setAttribute和许多其他功能,这将允许在IE8 +环境中正常工作。

答案 1 :(得分:5)

在第二个示例中设置类的正确方法是:

overlaybutton.className = 'overlaybutton';

这将使类在IE中运行。至于删除元素,我建议重新格式化您的事件处理附件,如下所示:

overlaybutton.onclick = deleteoverlay;

答案 2 :(得分:1)

我也遇到过这个问题。如果您能够在网站上添加jQuery,则可以使用$('#overlay').attr('class', 'overlay');。 jQuery对于制作跨浏览器兼容的代码非常有用。