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 + " </span>";
else
newHTML += "<span class='other'>" + val + " </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 + " </span>";
else
newHTML += "<span class='other'>" + val + " </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)
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)