Réapparition :
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>
Vous remarquerez :
<b>foobar</b>
(请参阅 PASTE HTML:
), mais...b
元素上设置了 style="font-size: 14px;"
(taille 14px du parent de contenteditable). J'aurais aimé qu'aucune taille de police ne soit définie sur le HTML collé car elles ne sont pas spécifiées dans les données du presse-papiers source.
Question : Comment forcer Chrome à ne mettre aucune taille de police sur le HTML collé alors qu'il n'y a pas de taille de police sur le HTML source ?
J'ai essayé une solution de contournement : le paramètre font-size: unset/revert
,但这会导致 font-size: unset
sur la source apparaît également dans le code HTML collé. Je ne veux pas qu'aucune taille de police apparaisse dans le code HTML collé.
Le contexte de ce code est une extension Chrome où je contrôle les données texte/html collées dans la cible. Je peux attacher un écouteur d'événement de collage sur le contenu cible modifiable, mais je ne peux pas modifier le HTML/le style du contenu après l'avoir collé.
Peut-être intercepter l'événement coller et modifier le contenu collé pour forcer son collage sous forme de texte brut à l'aide de js.
Mon identifiant à
contenteditable
div 上添加了id="editor"
. Et ajoutez le code js suivant :En voici un extrait en action. Faites-moi savoir si cela résout votre problème :
Vous pouvez utiliser Sélectionner l'API.
Les étapes sont
Range
représentant la sélection actuelle.Range
对象将粘贴的 HTML 标记解析为DocumentFragment
对象,这要归功于createContextualFragment()
objet pour analyser le balisage HTML collé dans un objet grâce àcreateContextualFragment()
Range#deleteContents()
DocumentFragment
l'objetRange
l'objet'; e.preventDefault(); const tag = e.clipboardData.getData("text/html") || e.clipboardData.getData("texte/texte brut"); const sel = getSelection(); const range = sel.getRangeAt(0); const frag = range.createContextualFragment(markup); scope.deleteContents(); range.insertNode(frag); range.collapse(); }); };🎜