JavaScript 實現局部打印(動態獲取的內容)

第一次寫打印,只知道window.print(),但是直接出來的是當前頁面的全部內容,而我要作的是打印當前模態框裏展現的內容。
網上搜了一下,都是指定具體的div,而後獲取該div裏的內容賦值給window.document.body.innerHTMLhtml

var bodyHtml = window.document.body.innerHTML;
        window.document.body.innerHTML = html;//html爲當前顯示的div的內容
        window.print();
        window.document.body.innerHTML = bodyHtml;

可是這個就致使了一個問題,若是是<span>打印的內容</span>這樣的,能夠直接獲取打印,但若是是賦值到input標籤裏的,根本就獲取不到值啊。
怎麼辦,接着搜唄。
找到兩種方法,第一種,也是比較原始的:將表單中的數據進行綁定,獲取過來從新賦值給對應的input中;jquery

//打印模態框問卷內容
        $('.myform').on('click', 'a[name="printInfo"]', function () {
            $('#listModal').modal('hide');//關閉模態框
            $('#quesInfoModal').modal('hide');
            var weI = this.id;
            onprint(weI);
        });
    });
    //打印指定區域
    function printHtml(html) {
        var bodyHtml = window.document.body.innerHTML;
        window.document.body.innerHTML = html;
        window.print();
        window.document.body.innerHTML = bodyHtml;
        //上面關於bodyHtml賦值的兩項操做能夠忽略,由於要關閉模態框而且刷新頁面
        //這個地方必需要刷新一下頁面,打印從新賦值以後,模態框裏的功能都不能正常使用,
        包括父頁面列表中的功能也失效,這個問題不是很明白,有知道的能夠幫忙解決一下
        refreshFrame();//刷新頁面
    }
    function onprint(weI) {
        if (weI == 'wenjuanI') {//調查問卷詳情
            bindData('#quesInfoModal');
            var html = $('#quesInfoModal').html();
        } else {
            bindData('#listModal');
            var html = $('#listModal').html();
        }

        printHtml(html);
    }
    //將表單中手動填寫的數據進行綁定,便於html()的時候獲取到  
    function bindData(modalID) {
        //type=text,type=number, 同時若是checkbox,radio,select>option的值有變化, 也綁定一下
        $(modalID + " input[type='text']").each(function () {
            $(this).attr('value', $(this).val());
        });
        $(modalID + " input[type='number']").each(function () {
            $(this).attr('value', $(this).val());
        });
         $(modalID + " input,select option").each(function(){  
            $(this).attr('value',$(this).val());  
        });  
        //type=checkbox,type=radio 選中狀態  
        $(modalID + " input[type='radio']").each(function () {
            if ($(this).attr('placeholder')) {//$(this).attr('checked')
                $(this).attr('checked', true);
            } else {
                $(this).removeAttr('checked');
            }
        });
        $(modalID + " input[type='checkbox']").each(function () {
            if ($(this).attr('placeholder')) {//$(this).attr('checked')
                $(this).attr('checked', true);
            } else {
                $(this).removeAttr('checked');
            }
        });

        //$('.modal-backdrop').each(function () {//關閉模態框的遮罩層
        //    $(this).removeClass('in');
        //});
    }

注意:這種方法,必需要刷新一下頁面,打印從新賦值以後,模態框裏的功能都不能正常使用,包括父頁面列表中的功能也失效,(至關於頁面變成了一個純靜態頁面,沒有js了)這個問題不是很明白,有知道的能夠幫忙解決一下啦
第二種方法,我看網上有說用jqprint插件的(http://www.jq22.com/jquery-in...),這個我也沒有詳細的看,只是稍微試了一下,也是不能獲取到input的值,並且隱藏的div也一併給顯示出來的了,效果很差,有會的能夠指教一下啊。ide

相關文章
相關標籤/搜索