$('textarea').on('keyup', function(){
  var ths = $(this);
  var array = $(this).val().split(' ');
  array.forEach(function(value){
    if (value.match(/(threewords)/g)) {
        ths.val().select(value);
    }
  })
  
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<textarea>word twowords threewords</textarea>

Ce que je veux faire, c'est select le text correspondant à l'intérieur du textarea s'il correspond au .match(/(threewords)/g) si j'ai écrit word,

Le problème est que je continue à obtenir que .match() est null s'il n'y a pas de correspondance ou que je reçois select is not a function si la correspondance existe, mais rien n'est sélectionné et l'erreur se produit, comment puis-je faire quoi j'essaye de faire correctement?

1
Toleo 17 avril 2018 à 16:41

3 réponses

Meilleure réponse
$('textarea').on('keyup', function(){
  var wordToSearch = 'threewords'
  var reg = new RegExp('\\b' + wordToSearch + '\\b')
  var indexStart = $(this).val().search(reg)
  if(indexStart >= 0){
    this.selectionStart = indexStart;
    this.selectionEnd = indexStart + wordToSearch.length;
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<textarea>word twowords threewords</textarea>

Ce code sélectionne threewords s'il est écrit dans la zone de texte.

2
Kokogino 17 avril 2018 à 14:25

.select ne fonctionne pas comme vous le souhaitez.

  1. $("#target").select(value) est une syntaxe incorrecte. $("#target").select() est une syntaxe valide mais elle ne met rien en évidence, elle déclenche l'événement select sur un élément avec l'ID 'target'.
  2. L'événement select est déclenché lorsqu'un texte est sélectionné, comme dans, cliqué et glissé par la souris. Il peut être géré en y attachant un gestionnaire:

Exemple:

    $( "#target" ).select(function() {
        $( "div" ).text( "Something was selected" ).show().fadeOut( 1000 );
    });

ths.val().select(value); une partie de votre code n'est pas une fonction en effet. D'où l'erreur.

En revanche, ths.val().select(); finit par déclencher l'événement select sur la valeur correspondante qui ne sert pas votre objectif.

1
Parama Kar 17 avril 2018 à 14:37

La fonction match () renvoie les correspondances dans un tableau de chaînes, j'ai mis un exemple pour le démontrer plus facilement

Essayez comme ceci:

$('button').on('click', function(){
    console.log('click');

  var tarea = $('textarea');
  var r = tarea.val().match(/(word)/g);
  console.log(r);
  console.log('jobs done');
});

Essayez-le sur jsfiddle

Ce que vous voulez faire d'autre dépend de ce dont vous avez besoin, si vous voulez juste savoir s'il y a une correspondance, vous pouvez simplement le faire en vérifiant si le tableau retourné est vide ou non.

Dans ce cas, j'utilise un bouton pour déclencher le contrôle pour plus de commodité

Modifier: version sans bouton jsfiddle

1
Gunnar Thoreson 17 avril 2018 à 14:02