-
-
Save andrewlimaza/490a69417d9fe2df3f668195a7661605 to your computer and use it in GitHub Desktop.
<script> | |
function printDiv(divName){ | |
var printContents = document.getElementById(divName).innerHTML; | |
var originalContents = document.body.innerHTML; | |
document.body.innerHTML = printContents; | |
window.print(); | |
document.body.innerHTML = originalContents; | |
} | |
</script> | |
<h1> do not print this </h1> | |
<div id='printMe'> | |
Print this only | |
</div> | |
<button onclick="printDiv('printMe')">Print only the above div</button> |
@dhruvroytalukdar , you are welcome. Vote on SO? - https://stackoverflow.com/a/72896189/11058652
This is a great solution but it breaks the Dom. nothing works after. is there a way to make it open a new tab to do this ?
Here's a proper, modern solution:
export function printElement(element: HTMLElement) {
const body = document.body
// Store current children of the body in an array
const originalChildren: Node[] = [...body.children]
// Clone the element to be printed
const elementClone = element.cloneNode(true) as HTMLElement
// Remove all current children from the body
while (body.firstChild) {
body.firstChild.remove()
}
// Add the cloned element to be printed
body.append(elementClone)
// Call window.print and revert the state back after printing
window.print()
// Revert the state back
while (body.firstChild) {
(body.firstChild as HTMLElement).remove()
}
for (const child of originalChildren) body.append(child)
}
By keeping a reference to the nodes that have been temporarily removed from the DOM, they can be added back without an issue: All listeners and references to these nodes are still valid.
@Vanilagy not sure how you got this one to work but i get an error Type 'HTMLCollection' must have a '[Symbol.iterator]()' method that returns an iterator
at [...body.children]
and when i run the function i get element.cloneNode is not a function
in the inspector console
just add return false after window.print() at the end of print function and your DOM will work properly as before
All other js stopped working on DOM after print call.
@CodingCreate101 your solution worked for me thanks.