在YUI3下列印Panel內容

2022-01-30 17:40:33 字數 1360 閱讀 1374

最近在用yui3.5製作乙個報表**,遇到個問題,需要列印報表,但是yui下我是通過model化panel來顯示報表內容的,一列印就把整個網頁打出來,結果是背景完全是亂的,樣式也不正常

yui3的panel也是通過div實現的,於是想是否能通過只列印div內容方式實現

在網上搜尋了下,列印div本身還是比較容易的,**是這樣的:

好吧,看起來很簡單,其實就是把當前網頁的innerhtml設定成div的內容,列印完後再設定回去

試了下,document.all.item有點問題,改成

列印是成功了,但是yui3下這個**是有著嚴重問題的:

網頁所有的yui**、事件什麼的在頁面列印完恢復後全部被破壞了,執行完後,panel的關閉按鈕,panel上的按鈕什麼的所有操作都完蛋了,也就是說,恢復後只剩了個頁面的殼了

於是想新的辦法處理,就是彈出乙個新的視窗,然後把內容設定到新視窗列印完後關閉

**是這樣的

printdiv: function

(e, printpage)

結果是列印出來了,但是列印出來的樣式完全不正確

試了幾種方法,最後確認以上**有幾點問題:

1、據說最好不要使用document.body.innerhtml,這個東西不是所有瀏覽器都支援

2、怎麼設定innerhtml都不行,無法實現樣式,最後是通過document.write方法才能實現

3、head裡需要設定和要列印頁面一樣的css才行

4、document.write後面需要跟document.close來關閉輸出流,一開始沒寫這個,導致頁面列印不出來(但是重新整理這個新頁面,然後就會彈出列印對話方塊了)

最後的**是這樣的:

printdiv: function

(e, printpage)

然後外面呼叫的方法是:

y.one('#v2012-print').on('click', y.actionhandler.printdiv, y.one('#v2012-print'), 'v2012-content');

我這裡是把printdiv放到了actionhandler模組裡,傳遞事件時需要額外的引數,第三個引數是事件物件本身,第四個引數是列印的div名稱

最後要說的是,這個列印div最後還是有以下兩點問題:

1、因為只列印div,當此div有由父級繼承或通過物件層次實現的css時,此css在新視窗是無效的,如果想生效,必須在外層進行css包裝

2、如果div裡有activex控制項,activex控制項的展現內容是無法保持和原本div裡的展現相同的,這個要解決的話必須自行通過activex控制項實現資料或影象複製

yui3下的load事件觸發

以前的一些總結 頁面load 與 資源load 這次提出來乙個window的load事件觸發問題以及解釋一下在 yui3 中問題的解決。問題 非同步指令碼對頁面的影響 我們知道 window 的load事件只會在頁面載入完畢後觸發一次且僅一次,如果你沒有在頁面載入前listen這個事件,則以後都沒機...

YUI 3 學習筆記 queue base

今天 yui 3 發布了 beta 1,實在是高興。繼續學習原始碼 queue base.一點心得 yui3 beta1 的 yui seed,與pr1 的架構圖 已經有了稍許不同 增加了 queue base 模組。queue base 的原始碼非常簡單,就是乙個包裝後的陣列。封裝後的介面非常有 ...

YUI3學習(一) 入門

學習yui3有一段時間,並且應用在了一些小專案的前端開發中,感覺還是蠻不錯的,所以決定開始記錄下yui3的學習歷程和個人經驗。yui3在前身yui2基礎上進行了大量的重新設計,並不只是簡單的版本公升級。yui3強調 重用,將功能做了級別劃分和顆粒化的設計。在概念上抽象出 核心 工具 和元件類,分別放...