代码如下:可直接复制测试,求大虾解决。(不要喷我的代码,这个只是模拟需求的一个最简单的场景。)<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>

解决方案 »

  1.   

    setTimeout(function(){_d1.innerHTML = _d1.innerHTML;}, 2000);仔细检查下这句话吧
      

  2.   

    请留意你的代码和布局
    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相当于重置了,但是却没有重新加载图片。所以才会有丢失的感觉。
      

  3.   

    不是楼上说的那个原因,选择图片之后,你用开发人员工具查看一下HTML就知道怎么回事了你设置了filters.item,但并没有执行任何innerHTML的操作,所以d2里面还是空的,所以你这里的赋值操作自然会把图片清空了