Javascript 删除@和carret之间的单词
在搜索了几乎所有关于如何删除contenteditable div中@和carret position等字符之间的文本的相关问题后,我几乎得出结论,这个问题已不可能被社区接受。 请参阅下面的问题,其中没有一个实际解决了删除任务。 ,Javascript 删除@和carret之间的单词,javascript,jquery,contenteditable,Javascript,Jquery,Contenteditable,在搜索了几乎所有关于如何删除contenteditable div中@和carret position等字符之间的文本的相关问题后,我几乎得出结论,这个问题已不可能被社区接受。 请参阅下面的问题,其中没有一个实际解决了删除任务。 , 我也被卡住了。我们要找的是 创建内容可编辑div和按钮value=“playing” 在contenteditable div中键入任何内容,并以任何字符开头,例如@ 例如,假设|符号代表“我是@sch | ool和朋友”一句中的carret 因为carret在单
我也被卡住了。我们要找的是
我们中的一些人不熟悉范围和选择,特此请求帮助。同时,让我试着创作一把小提琴。谢谢
函数将_替换为_播放(){
var-sel='';
if(window.getSelection){//webkits+firefox
var sel=document.getSelection();
选择修改(“扩展”、“背景词”、“单词”);
范围=选择范围(0);
range.deleteContents();
var el=document.createElement('span');
el.innerHTML='Playing';
$(el).attr('contenteditable','false');
var frag=document.createDocumentFragment(),节点;
while(node=el.firstChild){
frag.appendChild(节点);
}
range.insertNode(frag);
range.collapse();
//此代码添加了playing一词,但没有删除@school一词
}
else if(document.selection){//IE
//我不知道IE的代码
}
}
$(文档)。在('单击','.bt',函数()上{
var el=document.getElementById('editable_div');
将_替换为_playing();
});代码>
.parent\u容器{
位置:相对位置;
}
.编辑部{
宽度:200px;
填充物:5px10px;
最小高度:50px;
边框:1px#dcdc实心;
}
.bt{
宽度:70px;
边框:1px#000实心;
位置:绝对位置;
左:100px;
底部:-30px;
背景#ffff00;
填充:2px8px;
}
.说明{
边缘顶部:10px;
}
玩
键入am“@school”,使carret在放学后播放,然后单击播放
您好,我可能误解了您的问题,或者您在处理问题的方式上有一些限制。
但是一个简单的方法是使用string.replace()方法
$(文档).ready(函数(){
$(“.bt”)。单击(函数(){
让str=$(“#可编辑的_div p”).html();
str=替换学校(str,“玩”);
$(“#可编辑分区p”).html(str);
});
功能(内容、单词){
return content.replace(“@school”,word);//您可以使用regExp捕获以@
};
})
.parent\u容器{
位置:相对位置;
}
.编辑部{
宽度:200px;
填充物:5px10px;
最小高度:50px;
边框:1px#dcdc实心;
}
.bt{
宽度:70px;
边框:1px#000实心;
位置:绝对位置;
左:100px;
底部:-30px;
背景#ffff00;
填充:2px8px;
}
.说明{
边缘顶部:10px;
}
玩
我是保罗的学校
键入am“@school”,使carret在放学后播放,然后单击播放
如果我理解正确,那么您的问题并非无法解决。你可以尝试下面我做的方法。基本上,您希望检查用户为目标提供的输入字符串
字符(本例中为“@”)。如果在字符串中找到目标
,则将输入字符串拆分为一个数组。一旦拥有了该数组,就可以在其上使用array.prototype.map
方法来创建新数组。您的映射
回调应该检查当前元素是否包含目标
——如果包含,只需将其替换为所需的替换字符串,否则只需保持输入不变:
const divEditable=document.getElementById('editable_div');
document.getElementById('btnPlaying')。addEventListener('click',function(){
var input=divEditable.innerHTML;
var target='@';
if(input.length&&input.indexOf(target)>-1){
divEditable.innerHTML=doReplace(输入,目标,“播放”);
}
});
功能数据替换(输入、目标、替换){
var words=input.split(“”).map(函数(word){
if(单词索引of(目标)>-1){
退换货;
}
返回词;
});
返回单词。join(“”);
}
键入am“@school”,使carret在放学后播放,然后单击播放
播放
而不是创建小提琴,按Ctrl+M或单击问题编辑器上的
按钮,以打开“现场片段”工具。在现场为您树立榜样。@Taplar希望您了解我在寻找什么。我目前正在创建一个代码段我相信我理解您的要求,但我正在等待该代码段。在我看来,如果没有这个片段,问题就倾向于“过于宽泛”的一面。在你的问题中,你似乎问了很多问题。是的,我知道这是一个相当宽泛的话题,但请稍等,我给你看一下我的答案。正如你所看到的,在我刚才提供的片段中,单词playing将在放学后追加。在添加单词playingyour code之前,我想删除单词@school。我希望您的代码符合我的要求,让我看看替换后是否会影响contenteditable div中的节点。我将在之后进行评论。根据我的需要,您的代码很有用,但我可能需要检查执行我需要的操作是否有任何错误。谢谢,我稍后会评论