将某些单词用& lt; span& gt;使用jQuery [英] Wrap certain word with <span> using jquery
问题描述
我有以下 div
:
<div id="query" style="width:500px; height:200px;border:1px solid black"
spellcheck="false" contenteditable="true"></div>
客户可以在其中编写其 SQL
查询.我想做的是用 span
击中 Space 之后客户立即输入的换行字,然后根据键入的单词:
where Clients can write their SQL
queries. What I was trying to do is wrap words the client enters right after hitting Space with a span
and give this span a certain class
according to the word typed:
示例
如果客户端键入 select
,则需要在div中将这样的选择词包装起来:
If the client types select
i need to wrap this select word like this in the div:
<span class='select'> SELECT </span> <span> emp_name </span>
CSS
.select{color:blue ;text-transform:uppercase;}
这与 jsFiddle
的行为非常相似.我该如何实现?
It is something very similar to what jsFiddle
does. How can i achieve this?
这是我到目前为止所尝试的: jsFiddle
Here is what i have tried so far : jsFiddle
$(function(){
$('div').focus() ;
$('div').keyup(function(e){
//console.log(e.keyCode) ;
if(e.keyCode == 32){
var txt = $('div').text() ;
var x = 'SELECT' ;
$('div:contains("'+x+'")').wrap("<span style='color:blue ;
text-transform:uppercase;'>") ;
if(txt == 'SELECT'){
console.log('found') ; // why This Doesn't do any thing ?
}
}
});
});
推荐答案
我做了一个概念验证,对您最初的内容进行了一些修改.见下文
I did a proof of concept with some modifications from what you originally had. See below,
演示: http://jsfiddle.net/cgy69/ >
$(function() {
$('div').focus();
var x = ['SELECT', 'WHERE', 'FROM'];
$('div').keyup(function(e) {
//console.log(e.keyCode) ;
if (e.keyCode == 32) {
//using .text() remove prev span inserts
var text = $.trim($(this).text()).split(' ');
$.each(text, function(i, v) {
$.each(x, function(j, xv) {
if (v.toUpperCase() === xv) {
text[i] = '<span style="color: blue; text-transform: uppercase;">' + v + '</span>';
}
});
});
$(this).html(text.join(' ') + ' ');
setEndOfContenteditable(this);
}
});
function setEndOfContenteditable(contentEditableElement) {
var range, selection;
if (document.createRange) //Firefox, Chrome, Opera, Safari, IE 9+
{
range = document.createRange(); //Create a range (a range is a like the selection but invisible)
range.selectNodeContents(contentEditableElement); //Select the entire contents of the element with the range
range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
selection = window.getSelection(); //get the selection object (allows you to change selection)
selection.removeAllRanges(); //remove any selections already made
selection.addRange(range); //make the range you have just created the visible selection
}
else if (document.selection) //IE 8 and lower
{
range = document.body.createTextRange(); //Create a range (a range is a like the selection but invisible)
range.moveToElementText(contentEditableElement); //Select the entire contents of the element with the range
range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start
range.select(); //Select the range (make it the visible selection
}
}
});
您将进一步扩展它来处理
You going to extend this further to handle
-
退格 -
以前插入的HTML内容 -
光标位置部分完成,在中间进行编辑仍会弄乱插入符号.
BackspaceHTML contents from previous insertsCursor positionPartially done, editing in the middle would still mess up the caret.
还有更多..
这篇关于将某些单词用& lt; span& gt;使用jQuery的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!