代码如下:可直接复制测试,求大虾解决。(不要喷我的代码,这个只是模拟需求的一个最简单的场景。)<html>
<script type="text/javascript">
var changeimg = function(_this){
var _d1 = document.getElementById("d1"), _d2 = document.getElementById("d2");
_d2.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = _this.value;
setTimeout(function(){_d1.innerHTML = _d1.innerHTML;}, 2000);
};
</script>
<style type="text/css">
div{border:1px solid red; width:200px; height:100px;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)}
</style>
</head>
<body>
<input type = 'file' onchange = "changeimg(this)" />
<div id = 'd1'><div id = 'd2'></div></div>
</body>
</html>
<script type="text/javascript">
var changeimg = function(_this){
var _d1 = document.getElementById("d1"), _d2 = document.getElementById("d2");
_d2.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = _this.value;
setTimeout(function(){_d1.innerHTML = _d1.innerHTML;}, 2000);
};
</script>
<style type="text/css">
div{border:1px solid red; width:200px; height:100px;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)}
</style>
</head>
<body>
<input type = 'file' onchange = "changeimg(this)" />
<div id = 'd1'><div id = 'd2'></div></div>
</body>
</html>
setTimeout(function(){_d1.innerHTML = _d1.innerHTML;}, 2000);
<div id = 'd1'><div id = 'd2'></div></div>
-----------------------------------------------------------------------------------
我是这样理解的:d1.innerHTML 包含 d2;d2的图片是通过JS + 滤镜 加载的
当代码执行了 _d1.innerHTML = _d1.innerHTML 后, d2相当于重置了,但是却没有重新加载图片。所以才会有丢失的感觉。