2009-06-15 109 views
0

document.execCommand('SaveAs',false,'fileName'+“.txt”);document.execCommand ..SaveAs隐藏元素的问题。,

我想通过在javascript中使用上述命令将页面保存在文件中。

问题:我在页面上有一些隐藏元素.. CSS样式[display:none],所以当我尝试使用上面的命令保存页面内容时,它也会写入隐藏的元素内容。

任何想法如何摆脱隐藏的元素内容。是否有任何其他参数,我们可以通过这将告诉不要保存隐藏的元素内容。,

任何帮助表示赞赏。

PS:我不想从DOM中删除隐藏的元素内容。它不是一个选项。

感谢, 本

有没有人有任何其他的答案..

+0

css规则内嵌或由class/id属性设置?示例代码将有所帮助。 – 2009-06-15 20:25:29

+0

这是在一些仅限IE的环境中吗?普通的JavaScript不应该给开发者对最终用户PC的这种访问/控制。 – scunliffe 2009-06-15 20:26:02

回答

1

这就是我想出了

克隆的文件,然后删除与类名指定它为隐藏,或内容,你不希望保存的所有节点。在我的例子中,我使用了类名'hidden'。 removeElementsByClass遍历克隆的文档并删除所有不良节点。现在在对象newDoc上运行exec,保存这个克隆和减少的文档。

var newDoc = document.getElementsByTagName("html")[0].cloneNode(true); 
removeElementsByClass(newDoc, 'hidden'); 
newDoc.execCommand('SaveAs', false,'fileName' + ".txt"); 

function removeElementsByClass(object, class) 
{ 
    var elementArray = []; 
    if (object.all) 
    { 
     elementArray = object.all; 
    } 
    else 
    { 
     elementArray = object.getElementsByTagName("*"); 
    } 

    var matchedArray = []; 
    var pattern = new RegExp("(^|)" + class + "(|$)"); 

    for (var i = 0; i < elementArray.length; i++) 
    { 
     if (pattern.test(elementArray[i].className)) 
     { 
       elementArray[i].parentNode.removeChild(elementArray[i]); 
     } 
    } 
} 
0

未经测试...但我唯一想到的可能是:

  • 包住电话...
  • 用整个DOM的“纯”副本保存变量...
  • 去掉隐藏的元素,例如removeChild之(),其中显示:没有设定
  • 执行保存
  • 的DOM恢复到初始的

但是,这似乎是工作的公平位...什么是“删除的原因“这个隐藏的内容?也许有更好的解决方案,我们可以提供?

例如如果这是为了“安全”,以确保用户不会看到他们不应该的东西,那么这是一个坏方法......最好不要渲染内容。