jQuery для выбора текста (внутри тега div) в текстовом редакторе на вкладке события

В настоящее время я использую текстовый редактор html5 ( bootstrap-wysihtml5). Я пытаюсь использовать событие "нажатие клавиши" (на вкладке), чтобы выбрать конкретные слова в текстовом редакторе.

Вот пример моего текста:

<div>
  My name is {{name}} and I enjoy {{programming in Rails}}.
</div>

<div>
  {{Friend Name}} suggested that we get in touch to {{catch up}}. 
  He spoke {{highly}} about you and said that we should {{get together sometime}}. 
</div>

Цель: на вкладке "нажатие клавиши" выделите каждое слово в {{ }}. то есть 1. Нажмите Tab один раз, выделите {{name}}. 2. Нажмите tab во второй раз, выделите {{программирование в Rails}} и так далее.

Вот что я реализовал до сих пор:

$('#wysihtml5').each(function(i, elem) {
  $(elem).wysihtml5({
    "font-styles": true,
    "events": {
      "focus": function() {
        $('.wysihtml5-sandbox').contents().find('body').on("keydown",function(event) {          
          event.preventDefault(); 

          var numLoops = _.size($(this).children());            
          var keyCode = event.keyCode || event.which;              
          if (keyCode == 9){
            // loop thru all children divs

            for (var i = 0; i < numLoops; i++) {
              // get array of all matched items {{}}  

              var sentence = $($(this).children()[i]).html();
              var toSwap = sentence.match(/\{{(.*?)\}}/g);
              var numSwap = _.size(toSwap);
              // NEED TO FIGURE OUT: How to select matched item..and move to the next one on tab           
            }                         
          }      
       });                               
      }
    } 
  }); 
}); 

Какие-нибудь мысли? Я потратил 2 дня, чтобы найти, как сделать эту работу. Ниже приведены ссылки на то, что я посмотрел:

1 ответ

Решение

То, что вы хотите, это индекс совпадений регулярных выражений.

Если вы выполняете регулярное выражение следующим образом:

var reg = /\{{(.*?)\}}/g; // The Regex selector

while(match=reg.exec(sentence)) { // Iterate all the matched strings

    // match.index gives the starting position of the matched string
    // match.length gives the length of the matched string, number of characters

}

Вы получите позицию и длину всех матчей, которые могут быть использованы для выбора. Цикл while повторяет все совпадения.

Сохраните совпадения и используйте их значения индекса и длины, чтобы выбрать их одно за другим.

Отредактируйте Назад снова. Как вы, наверное, поняли, выбор текста в javascript - не самая простая задача, но она вполне выполнима.

Я собрал небольшой JSFiddle, чтобы продемонстрировать технику, которую я использовал, чтобы получить правильный результат. Вы можете найти это здесь. Надеюсь, это понятно, и я постарался хорошо это прокомментировать.

Конечно, если у вас есть какие-либо вопросы, просто спросите!

Ура!

Другие вопросы по тегам