Kemunculan semula:
here:
)
window.onload = function() { const info = document.querySelector('.info'), pinfo = document.querySelector('.paste-info'), target = document.querySelector('.target'); setInterval(() => { const sel = ".source *, .target *" info.innerHTML = ''; for (const elm of [...document.querySelectorAll(sel)]) { info.innerHTML += "TAG: " + elm.tagName + "; TEXT: " + elm.innerText + "; FONTSIZE: " + window.getComputedStyle(elm)['font-size'] + "<br>"; } }, 1000); target.addEventListener('paste', function(e) { pinfo.innerHTML += "PASTE HTML: <pre>" + e.clipboardData.getData('text/html').replaceAll('<', '<').replaceAll('>', '>') + '</pre><br>'; }); };
div[contenteditable] { border: 1px solid black; }
<div class="source" contenteditable=true>Source text: <b>foobar</b></div> <div style="font-size: 14px"> <div contenteditable=true class="target">Destination, <h1>paste here:</h1></div> </div> <div class="info"></div> <div class="paste-info"></div>
Anda akan perasan:
<b>foobar</b>
(请参阅 PASTE HTML:
), tetapi...b
元素上设置了 style="font-size: 14px;"
(saiz 14px daripada induk contenteditable). Saya harap tiada saiz fon ditetapkan pada HTML yang ditampal kerana ia tidak dinyatakan dalam data papan keratan sumber.
Soalan: Bagaimana untuk memaksa Chrome tidak meletakkan sebarang saiz fon pada HTML yang ditampal apabila tiada saiz fon pada HTML sumber?
Saya mencuba penyelesaian: tetapan font-size: unset/revert
,但这会导致 font-size: unset
pada sumber juga muncul dalam HTML yang ditampal. Saya tidak mahu sebarang saiz fon muncul dalam HTML yang ditampal.
Konteks kod ini ialah sambungan Chrome di mana saya mengawal data teks/html yang ditampal pada sasaran. Saya boleh melampirkan pendengar acara tampal pada sasaran contenteditable, tetapi saya tidak boleh menukar HTML/gaya kandungan selepas menampalnya.
Mungkin memintas acara tampal dan menukar kandungan yang ditampal untuk memaksanya ditampal sebagai teks biasa menggunakan js.
Id saya di
contenteditable
div 上添加了id="editor"
. Dan tambahkan kod js berikut:Berikut ialah coretannya dalam tindakan. Beritahu saya jika ini menyelesaikan masalah anda:
Anda boleh menggunakan Pilih API.
Langkahnya ialah
Range
yang mewakili pilihan semasa.Range
对象将粘贴的 HTML 标记解析为DocumentFragment
对象,这要归功于createContextualFragment()
ini untuk menghuraikan penanda HTML yang ditampal ke dalam objek terima kasih kepadacreateContextualFragment()
Range#deleteContents()
DocumentFragment
objekRange
objek semasa'; e.preventDefault(); teg const = e.clipboardData.getData("text/html") || e.clipboardData.getData("teks/teks biasa"); const sel = getSelection(); julat const = sel.getRangeAt(0); const frag = range.createContextualFragment(markup); scope.deleteContents(); range.insertNode(frag); range.collapse(); }); };🎜