将String转换为Array并在textarea中选择匹配的单词

时间:2018-04-17 13:41:02

标签: javascript jquery

$('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>

我想要做的是select text匹配的textarea如果匹配.match(/(threewords)/g),如果我写word

问题在于,如果匹配,我会.match() nullselect is not a function;如果匹配,则$("#id_classstartdate")$("[id^=id_][id$=classstartdate]"),但是没有选择任何内容并且错误发生,怎么能我正在做我想做的事情吗?

3 个答案:

答案 0 :(得分:2)

$('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>

如果代码写在textarea中,则此代码选择threewords

答案 1 :(得分:1)

match()函数返回字符串数组中的匹配项,我举了一个例子来演示它更容易

尝试这样:

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

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

jsfiddle

上试试

你还想做什么取决于你需要什么,如果你只是想知道是否有匹配你可以通过检查返回的数组是否为空来完成。

在这种情况下,我使用按钮触发检查以方便

编辑:没有按钮的版本jsfiddle

答案 2 :(得分:1)

.select不能像你想要的那样工作。

  1. $("#target").select(value)语法不正确。 $("#target").select()是一种有效的语法,但它不突出显示任何在id为'target'的元素上触发select事件的内容。
  2. 选择任何文本时会触发select事件,例如鼠标单击并拖动。它可以通过附加一个处理程序来处理:
  3. 示例:

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

    ths.val().select(value);部分代码确实不是函数。因此错误。

    另一方面,

    ths.val().select();最终会触发匹配值上的select事件,但不符合您的目的。