Javascript 将类添加到所选文本,而不是所选文本的第一次出现

标签 javascript php jquery html css

我想用 javascript 向文本添加一个类(稍后将该字符串发送到 php)。每当我尝试这样做时,代码都会将类添加到我选择的第一次出现,而不是实际选择。请记住,我想将该精确选择发送到 php(并将其也放入数据库中,以便即使在刷新后它也保留该类)。

JQ

    $("#highlight").click(function(){
   paraval = $('#para').html();
   sel = window.getSelection();
   newst = '<a class="selectedText">' + sel + '</a>';
   newvalue = paraval.replace(sel, newst);
   $('#para').html(newvalue);
});

HTML

    <p>Will only highlight if text is selected from comment class div only</p>
<div class="comment" id="para" contenteditable="true">Here goes some text Here goes some text Here goes some text Here goes some text
Some other text</div>
<input type="button" value="Highlight" id="highlight"/>

CSS

 .selectedText{
    background-color:yellow;
}
.comment{
    border: solid 2px;
}

.comment::selection {
  background-color: yellow;
}

此处示例:http://jsfiddle.net/zq1dqu3o/3/

尝试选择单词“text”的最后一次出现。第一个将获得类“selectedText”...

谢谢

最佳答案

叫我懒惰,但如果你不介意 span 作为你的选择标记,你可以使用 rangy的 cssApplier 类。

var cssApplier;
$(document).ready(function() {
   rangy.init();
    cssApplier = rangy.createCssClassApplier(
                 "selectedText", {normalize: true,
                                 applyToEditableOnly:true});
});

$("#highlight").click(function(){
    if(cssApplier != undefined)
    {
        cssApplier.toggleSelection();        
    }
});

我在这里使用 applyToEditableOnly 来让它只在那个特定的 div 中工作。 (我不确定该特定设置的跨浏览器兼容性如何。虽然在 Chrome 和 Firefox 中工作。)这使用位置而不是选择文本来决定标记什么。

JS Fiddle 在这里:http://jsfiddle.net/zq1dqu3o/7/

关于Javascript 将类添加到所选文本,而不是所选文本的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457432/

相关文章:

javascript - 如何将 jQuery Validation 插件与表单级服务器端验证一起使用?

JQuery Ajax 函数调用了两次,第一次调用工作,而第二次则不工作

javascript - C1005 : Closure Compiler Warning (Parse error. 由于语法错误,名称无法识别。) -- 压缩输入:

php - 如何从 MYSQL 数据库获取最后一条记录?

php - getColumnMeta 不返回正确的字段类型

PHP 将旧的 mysql_query 更改为 PDO

javascript - 缩放图像以随着页面加载而增大

javascript - 如何使用querySelectorAll获取YouTube channel 名称?

javascript - 尝试将屏幕锁定为纵向。英特尔 XDK 3922

javascript - 在浏览器中使用 Javascript 连续跟踪本地文件的新行