更改textarea中特定单词的颜色

13 html javascript jquery onkeyup

我正在构建一个Sql查询构建器,并希望在用户键入SELECT,FROM,WHERE等单词时更改textarea中单词的文本颜色.

我已经搜索了一下这个(https://jsfiddle.net/qcykvr8j/2/)我很遗憾没有进一步.

示例代码

HTML:

<textarea name="query_field_one" id="query_field_one" onkeyup="checkName(this)"></textarea>
Run Code Online (Sandbox Code Playgroud)

JS:

    function checkName(el)
    {
    if (el.value == "SELECT" || 
    el.value == "FROM" || 
    el.value == "WHERE" || 
    el.value == "LIKE" || 
    el.value == "BETWEEN" || 
    el.value == "NOT LIKE" || 
    el.value == "FALSE" || 
    el.value == "NULL" || 
    el.value == "TRUE" || 
    el.value == "NOT IN")
    {
      el.style.color='orange'

    }
    else {
      el.style.color='#FFF'

    }
  }
Run Code Online (Sandbox Code Playgroud)

的jsfiddle:

https://jsfiddle.net/qcykvr8j/2/

但是这个例子在我进一步输入时会删除颜色.

我想要的是这个:

正确的方法

我已经尝试过将Keyup与jQuery中的Contains结合使用,但这并没有带来太多结果.

密钥:https://api.jquery.com/keyup/

包含:https://api.jquery.com/contains-selector/

我希望有人可以帮助我找到一些我可以找到更多信息的例子.

此致,Jens

Moh*_*mad 21

您无法更改textarea中的颜色词,但您可以使用contenteditable属性更改元素的内容文本(如div,p,span).要完成这项工作,您可以使用javascript插件,但如果您想创建它,则可以使用此代码.为此,您需要在文本中获得任何单词.然后检查目标单词是否在SQL语句中突出显示它.

// SQL keywords
var keywords = ["SELECT","FROM","WHERE","LIKE","BETWEEN","NOT LIKE","FALSE","NULL","FROM","TRUE","NOT IN"];
// Keyup event
$("#editor").on("keyup", function(e){
  // Space key pressed
  if (e.keyCode == 32){
    var newHTML = "";
    // Loop through words
    $(this).text().replace(/[\s]+/g, " ").trim().split(" ").forEach(function(val){
      // If word is statement
      if (keywords.indexOf(val.trim().toUpperCase()) > -1)
        newHTML += "<span class='statement'>" + val + "&nbsp;</span>";
      else
        newHTML += "<span class='other'>" + val + "&nbsp;</span>"; 
    });
    $(this).html(newHTML);

    // Set cursor postion to end of text
    var child = $(this).children();
    var range = document.createRange();
    var sel = window.getSelection();
    range.setStart(child[child.length-1], 1);
    range.collapse(true);
    sel.removeAllRanges();
    sel.addRange(range);
    this.focus();
  }
});
Run Code Online (Sandbox Code Playgroud)
// SQL keywords
var keywords = ["SELECT","FROM","WHERE","LIKE","BETWEEN","NOT LIKE","FALSE","NULL","FROM","TRUE","NOT IN"];
// Keyup event
$("#editor").on("keyup", function(e){
  // Space key pressed
  if (e.keyCode == 32){
    var newHTML = "";
    // Loop through words
    $(this).text().replace(/[\s]+/g, " ").trim().split(" ").forEach(function(val){
      // If word is statement
      if (keywords.indexOf(val.trim().toUpperCase()) > -1)
        newHTML += "<span class='statement'>" + val + "&nbsp;</span>";
      else
        newHTML += "<span class='other'>" + val + "&nbsp;</span>"; 
    });
    $(this).html(newHTML);

    // Set cursor postion to end of text
    var child = $(this).children();
    var range = document.createRange();
    var sel = window.getSelection();
    range.setStart(child[child.length-1], 1);
    range.collapse(true);
    sel.removeAllRanges();
    sel.addRange(range);
    this.focus();
  }
});
Run Code Online (Sandbox Code Playgroud)
#editor {
    width: 400px;
    height: 100px;
    padding: 10px;
    background-color: #444;
    color: white;
    font-size: 14px;
    font-family: monospace;
}
.statement {
    color: orange;
}
Run Code Online (Sandbox Code Playgroud)


prt*_*712 6

JS 小提琴代码

HTML-

<div id="board" class="original" contenteditable="true"></div>
<div id="dummy" class="original"></div>
Run Code Online (Sandbox Code Playgroud)

CSS-

.original {
   position:absolute;width: 50%; margin: 0 auto; padding: 1em;background: #fff;height:100px;margin:2px;border:1px solid black;color:#fff;overflow:auto;
}

#dummy{
  color:black;
}
#board{
  z-index:11;background:transparent;color:transparent;caret-color: black;
}
.original span.highlighted {
    color:red;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript-

var highLightedWord = ["select","insert","update","from","where"];
var regexFromMyArray = new RegExp(highLightedWord.join("|"), 'ig');
$('#board').keyup(function(event){
 document.getElementById('dummy').innerHTML = $('#board').html().replace(regexFromMyArray,function(str){
 return '<span class="highlighted">'+str+'</span>'
 })
})
var target = $("#dummy");
  $("#board").scroll(function() {
    target.prop("scrollTop", this.scrollTop)
          .prop("scrollLeft", this.scrollLeft);
  });
Run Code Online (Sandbox Code Playgroud)