2009-06-15 73 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恢復到初始的

但是,這似乎是工作的公平位...什麼是「刪除的原因「這個隱藏的內容?也許有更好的解決方案,我們可以提供?

例如如果這是爲了「安全」,以確保用戶不會看到他們不應該的東西,那麼這是一個壞方法......最好不要渲染內容。