129 votes

Comment mettre du texte en surbrillance à l'aide de javascript

Quelqu'un peut-il m'aider avec une fonction javascript qui peut mettre en évidence du texte sur une page web. L'exigence est de ne mettre en évidence qu'une seule fois, et non pas de mettre en évidence toutes les occurrences du texte comme nous le faisons dans le cas d'une recherche.

5 votes

Si vous postez le code de la fonction, nous pourrons vous aider. Si vous nous demandez de créer une telle fonction pour vous... c'est moins probable. Vous devez faire quelque chose par vous-même. Commencez à faire quelque chose et revenez quand vous êtes bloqué.

7 votes

Oui, j'ai lu How to Ask et j'ai fait quelque chose par moi-même, mais je suis resté bloqué et c'est pourquoi j'ai demandé. Je travaille sur Android et j'ai peu de connaissances en javasript, c'est pourquoi je ne suis pas en mesure de le faire moi-même. Auparavant, j'utilisais un autre javascript qui faisait le travail mais pas sans certaines limitations. Je n'ai peut-être pas utilisé les bons mots en posant cette question et j'en suis désolé, mais s'il vous plaît, ne pensez pas le contraire.

1 votes

Ce plugin peut vous intéresser : github.com/julmot/jmHighlight . Il peut mettre en évidence les mots clés séparément ou en tant que terme, peut mettre en évidence la correspondance avec votre élément personnalisé et votre nom de classe et peut également rechercher les diacritiques. En outre, il vous permet de filtrer le contexte dans lequel vous recherchez des correspondances.

4voto

JGuo Points 637

En 2019, l'API Web prend désormais en charge de manière native la mise en évidence des textes :

const selection = document.getSelection();
selection.setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);

Et vous êtes prêt à partir ! anchorNode est le nœud de départ de la sélection, focusNode est le nœud de fin de sélection. Et, si ce sont des noeuds de texte, offset est l'indice du caractère de début et de fin dans les nœuds respectifs. Voici l'indice documentation

Ils ont même un Démonstration en direct

0 votes

Oh c'est génial. il suffit de l'utiliser comme ceci : selection.setBaseAndExtent(desiredNode, 0, desiredNode, 1) ; pour mettre en évidence le seul noeud dont vous avez besoin. et cela fonctionne avec Gutenberg

0 votes

Joli, mais toujours marqué comme expérimental.

2voto

Cybernetic Points 2882

Il suffit de passer votre mot dans le champ suivant fonction :

function highlight_words(word) {
    const page = document.body.innerHTML;
    document.body.innerHTML = page.replace(new RegExp(word, "gi"), (match) => `<mark>${match}</mark>`);
}

Utilisation :

highlight_words("hello")

Cela mettra en évidence toutes les occurrences du mot sur la page.

1voto

Igor G. Points 868

J'ai trouvé mettre en évidence est la meilleure solution, car il permet de mettre en évidence les éléments suivants partie du contenu :

$('li').highlight('bla') ;

1voto

Carson Arucard Points 334

J'aimerais en dire plus sur l'utilisation de la fragment de texte défilant

la syntaxe : #:~:text=[prefix-,]textStart[,textEnd][,-suffix]

Exemple

Lien vers la démo

#:~:text=to

Comment mettre du texte en surbrillance à l'aide de javascript

#:~:text=to,text

Comment mettre du texte en surbrillance à l'aide de javascript

#:~:text=tex-,t

Comment mettre du texte en surbrillance à l'aide de javascript

#:~:text=text-,using,-javascript

Comment mettre du texte en surbrillance à l'aide de javascript

Si vous voulez mettre en évidence fragments de texte multiples dans une seule URL ( &text= )

Exemple

Lien vers la démo

#:~:text=javascript&text=highlight&text=Ankit

Comment mettre du texte en surbrillance à l'aide de javascript

voir plus : https://web.dev/text-fragments/#textstart

1voto

Mahdi Porkar Points 113

Je pense que ce code est meilleur car il met en évidence tous les caractères répétés.

function highlight(text) {
  var inputText = document.getElementById("inputText");
  var innerHTML = inputText.innerHTML;
  var index = innerHTML.indexOf(text);
  if (index >= 0) { 
     inputText.innerHTML=innerHTML.split(text).join('<span class="highlight">'+text+'</span>');
  }
}

.highlight {
  background-color: yellow;
}

<button onclick="highlight('fox')">Highlight</button>

<div id="inputText">
  The fox went over the fence fox fox fox wen fox
</div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X