5

Как напечатать только <div id="printarea"></div>?

12

Как мне напечатать указанный div (без необходимости вручную отключать остальное содержимое на странице)?

Я хочу избежать появления нового диалогового окна с предварительным просмотром, поэтому создание нового окна с этим содержимым нецелесообразно.

На странице есть несколько таблиц, одна из которых содержит нужный div - таблица оформлена с визуальными стилями для веба, которые не должны отображаться при печати.

4 ответ(ов)

3

У меня есть более простое решение с минимальным количеством кода.

Поместите вашу печатаемую часть в див с идентификатором, например так:

<div id="printableArea">
      <h1>Напечатайте меня</h1>
</div>

<input type="button" onclick="printDiv('printableArea')" value="напечатать див!" />

Затем добавьте событие, например onclick (как показано выше), и передайте идентификатор дива, как я сделал выше.

Теперь создадим очень простой JavaScript:

function printDiv(divId) {
     var printContents = document.getElementById(divId).innerHTML;
     var originalContents = document.body.innerHTML;

     document.body.innerHTML = printContents;

     window.print();

     document.body.innerHTML = originalContents;
}

Обратите внимание, как это просто? Никаких всплывающих окон, никаких новых окон, никакого сложного стиля и никаких библиотек JavaScript, таких как jQuery. Проблема с действительно сложными решениями (ответ несложный, и я не о нем) в том, что они НИКОГДА не будут работать во всех браузерах! Если вы хотите изменить стили, сделайте, как показано в отмеченном ответе, добавив атрибут media к ссылке на таблицу стилей (media="print").

Без лишней информации, легковесно, и это просто работает.

1

С jQuery это делается очень просто:

w = window.open();
w.document.write($('.report_left_inner').html());
w.print();
w.close();

Этот код открывает новое окно, записывает в него HTML-код, полученный из элемента с классом report_left_inner, затем вызывает диалог печати и закрывает окно. Убедитесь, что элемент с классом report_left_inner существует в момент выполнения скрипта, иначе результат может быть неожидаемым.

1

На данный момент все ответы имеют свои недостатки — они либо предлагают добавлять class="noprint" ко всем элементам, либо портят отображение внутри #printable.

Я считаю, что наилучшее решение - создать обертку вокруг элементов, которые не должны печататься:

<head>
    <style type="text/css">
        #printable { display: none; }

        @media print {
            #non-printable { display: none; }
            #printable { display: block; }
        }
    </style>
</head>
<body>
    <div id="non-printable">
        Ваши обычные содержимое страницы
    </div>

    <div id="printable">
        Версия для печати
    </div>
</body>

Конечно, это решение не идеально, так как требует немного изменить структуру HTML...

0

Чтобы распечатать содержимое определённого элемента на странице, вы можете использовать следующий код JavaScript. Этот скрипт берёт HTML-код элемента с указанным идентификатором и заменяет содержимое всего тела документа на этот элемент, после чего вызывает окно печати. В конце он восстанавливает оригинальное содержимое страницы. Вот код:

<script type="text/javascript">
   function printDiv(divId) {
       var printContents = document.getElementById(divId).innerHTML; // Получаем содержимое элемента
       var originalContents = document.body.innerHTML; // Сохраняем оригинальное содержимое страницы
       document.body.innerHTML = "<html><head><title></title></head><body>" + printContents + "</body>"; // Заменяем содержимое на нужный элемент
       window.print(); // Вызываем печать
       document.body.innerHTML = originalContents; // Восстанавливаем оригинальное содержимое
   }
</script>

Примечания:

  1. Параметр divId — это ID элемента, который вы хотите распечатать.
  2. Обратите внимание, что после печати оригинальное содержимое страницы восстанавливается, что предотвращает его потерю.
  3. Этот метод может не функционировать корректно, если в вашем элементе присутствуют внешние стили или скрипты, которые не будут применены при этом подходе.
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь