2012-02-02 109 views
2

所以我试图突出显示用户选择的文本。基本上,用户可以拖动鼠标(同时点击)来选择页面上的一些随机文本(<p>标签内的任何内容)。在mouseup上,我想将该文本更改为突出显示和粗体显示。使用jQuery高亮选中的文本

对此的要求是选中的文本和仅选中的文本被突出显示。因此,在另一个<p>标记中没有匹配的文本,并且在同一个<p>标记中没有匹配的文本。现在

,这是我迄今为止的CSS:

span.highlight { 
    background-color: yellow; 
    font-weight: bold; 
} 

而我有jQuery的:

function getSelected() { 
    var selected = ''; 

    if (window.getSelection) { 
     selected = window.getSelection().toString(); 
    } else if (document.getSelection) { 
     selected = document.getSelection(); 
    } else if (document.selection) { 
     selected = document.selection.createRange().text; 
    } 
} 

$(document).ready(function() { 
    $('p').live('mouseup', function() { 
     var selected = getSelected(); 

     $(this).html($(this).html().replace(selected, '<span class="highlight">' + selected + '</span>')); 
    }); 
}); 

现在这个作品几乎。但是,它会选择所选文本的第一个实例并突出显示,这不是我想要的,我希望它选择实际选定的文本。而且还有一个问题,一旦某些文本突出显示,如果我选择包含部分突出显示文本的更多文本,则不会更改它。

我想知道是否有人可以帮助解决这些问题?提前致谢。

编辑:

对不起,我应该还提到,我不能使用插件。我已经看过他们,他们中的大多数都能很好地满足我的需求,但我无法使用它们。

+1

你可以自己解决这个问题,或者你可以使用已经有的其他人的图书馆:http://code.google.com/p/rangy/ – 2012-02-02 22:01:39

+0

对不起,我只是编辑了我的文章。我无法使用任何插件。但是,谢谢。 – 2012-02-02 22:07:47

+0

'@ Arak':你仍然可以看看Tim如何在Rangy中使用这些技术。 – 2012-02-02 22:13:10

回答

2

我用:http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html

在有良好的效果了过去。

但是在你的例子中看看.replace函数。请尝试使用.replaceAll。

+0

我很感激你花时间补充一点。不过,我不能使用插件,我只是编辑我的帖子,以包括该限制,对不起。 – 2012-02-02 22:08:12

+0

.replaceAll不按我需要的方式工作。它的工作原理就像我通过用其他html元素替换html元素一样。此外,顾名思义,它取代了所有的事件,而不是特定的事件。 – 2012-02-02 22:47:05