Javascript document.execCommand..存在隐藏元素的另存为问题。,

Javascript document.execCommand..存在隐藏元素的另存为问题。,,javascript,css,Javascript,Css,document.execCommand('SaveAs',false,'fileName'+“.txt”) 我正试图使用javascript中的上述命令将页面保存在一个文件中 问题:我在页面上有一些隐藏元素..CSS Style[display:none],因此当我尝试使用上述命令保存页面内容时,它也会写入隐藏元素内容 任何关于如何去除隐藏元素内容的想法。我们是否可以传递任何其他参数,告诉您不要保存隐藏的元素内容 感谢您的帮助 PS:我不想从DOM中删除隐藏的元素内容。这不是一个选择 谢谢,

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

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

问题:我在页面上有一些隐藏元素..CSS Style[display:none],因此当我尝试使用上述命令保存页面内容时,它也会写入隐藏元素内容

任何关于如何去除隐藏元素内容的想法。我们是否可以传递任何其他参数,告诉您不要保存隐藏的元素内容

感谢您的帮助

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

谢谢, 本


有人有其他答案吗..

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

  • 结束通话
  • 使用整个DOM的“纯”副本保存变量
  • 去掉隐藏的元素,例如设置了display:none的removeChild()
  • 执行保存
  • 将DOM重置为原始状态
但这似乎是一个公平的工作。。。“删除”此隐藏内容的原因是什么?也许我们能提供更好的解决方案


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

以下是我的想法

克隆文档,然后删除所有具有指定为隐藏的类名或不希望保存的内容的节点。在我的例子中,我使用了类名“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]);
        }
    }
}
var newDoc=document.getElementsByTagName(“html”)[0].cloneNode(true);
removeElementsByClass(newDoc,“隐藏”);
execCommand('SaveAs',false,'fileName'+“.txt”);
函数removeElementsByClass(对象,类)
{
var elementArray=[];
if(object.all)
{
elementArray=object.all;
}
其他的
{
elementArray=object.getElementsByTagName(“*”);
}
var matchedaray=[];
var模式=新的RegExp(“(^ |”)”+类+“(|$)”;
for(var i=0;i
css规则是内联的还是由class/id属性设置的?示例代码会有所帮助。这是在某些内部IE专用环境中吗?普通的JavaScript不应该让开发者对最终用户的PC进行这种访问/控制。@scunlife:是的,这只适用于IE。我同意存在一些安全问题,但现在不担心这个问题@伊恩:我觉得这不重要。它是内联的,但我可以把它改成类。从你需要一种标准化的方法来处理这个问题的观点来看,这很重要:)它的内联。。但是可以把它变成一个好的用户体验。理想情况下,用户应该保存页面上显示的内容,而不是隐藏的内容。这是一个有效的方案。