//Move mouse over and click = copy outer HTML; Ctrl+click=del; Shift+move: 3 nodes up //javascript: (function() { var d=document; var lastEl = null; //last selected element //https://makandracards.com/makandra/46962-javascript-bookmarklet-to-click-an-element-and-copy-its-text-contents var /*overlay*/ ov = d.createElement('div'); Object.assign(ov.style, { position: 'fixed', top: 0, left: 0, width: '100vw', height: '100vh', zIndex: 99999999, background: 'transparent', cursor: 'crosshair' }); d.body.append(ov); function getEl(ev) { ov.style.pointerEvents = 'none'; var el = d.elementFromPoint(ev.clientX, ev.clientY); if (ev.shiftKey) { var el0 = el, i=4; //4-1=3 parents up while ((el0) && (i--)) {el = el0; el0 = el.parentElement;} } ov.style.pointerEvents = 'auto'; return el; } d.addEventListener('mousemove', function(ev) { var el = getEl(ev); if (!el) return; lastEl = el; var /*position*/ po = el.getBoundingClientRect(); Object.assign(ov.style, { background: 'rgba(0,128,255,0.25)', outline: '1px solid rgba(0,128,255,0.5)', top: '' + po.top + 'px', left: '' + po.left + 'px', width: '' + po.width + 'px', height: '' + po.height + 'px' }); }); ov.addEventListener('click', function(ev) { //var tx = getEl(ev).outerHTML; //ext = tx.replace(/\n[ \n]+\n/g, "\n").replace(/\n\n+/g, "\n\n").replace(/^\n+|\n+$/g, ''); //if (!tx.match("\n")) tx = tx.replace(/^ +| +$/, '') //window.prompt('Press Ctrl+C to copy', tx); var tx = (lastEl || getEl(ev)).outerHTML; d.body.removeChild(ov); if (!(ev.ctrlKey)) {navigator.clipboard.writeText(tx);} else {lastEl.remove();} }); })()