document.execCommand ..SaveAs隐藏元素的问题。,

时间:2009-06-15 20:09:52

标签: javascript css

document.execCommand('SaveAs',false,'fileName'+“。txt”);

我正在尝试使用javascript中的上述命令将页面保存在文件中。

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

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

感谢任何帮助。

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

谢谢, 本

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

2 个答案:

答案 0 :(得分: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]);
        }
    }
}

答案 1 :(得分:0)

未经测试......但我唯一的想法是:

  • 打电话......
  • 使用整个DOM的“纯”副本保存变量...
  • 删除隐藏的元素,例如removeChild()其中display:none设置
  • 执行保存
  • 将DOM重置为原始

但这似乎是一项相当大的工作......“删除”这些隐藏内容的原因是什么?也许我们可以提供更好的解决方案?

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