J'essaie de mettre en évidence de manière programmée toutes les occurrences d'un mot recherché en ajoutant une classe CSS comme suit :
const style = document.createElement('style');
style.setAttribute('type', 'text/css');
style.innerHTML = `
.word-occurence {
background: yellow;
color: red;
font-weight: bold;
cursor: pointer;
}
`;
document.head.append(style)
document.designMode = "on";
window.getSelection().collapse(document, 0);
const word = 'Ubuntu';
while (window.find(word)) {
document.execCommand('insertHTML', false, '<span class="word-occurence">' + window.getSelection() + '</span>');
window.getSelection().collapseToEnd();
}
document.designMode = "off";
Il fonctionne presque parfaitement. Lorsque j'essaie ceci sur le serveur HTML par défaut pour Apache sur Ubuntu (comme on peut le trouver ici : http://bl.ocks.org/SunDi3yansyah/raw/c8e7a935a9f6ee6873a2/ ), toutes les occurrences du mot "Ubuntu" sont devenues rouges sur un fond jaune, mais l'une d'entre elles (la quatrième, c'est-à-dire celle qui se trouve au début de son paragraphe) a reçu un style CSS en ligne au lieu de la classe. Il manque le cursor: pointer
et il a un supplément font-size: 14.6667px;
Je sais que document.execCommand
est déprécié mais je suis super curieux : que s'est-il passé ?