2

我正在寻找一种显示一段文本并允许用户单击单个单词以突出显示它的方法。

我发现一些代码会在每个单词周围放置一个跨度。所有这一切都很好,但是......

当我有一些像说 Soufflé 这样的文字时,它不会将其识别为一个单词。

这是我正在使用的代码。

var p = $('#storyText');

p.html(function(index, oldHtml) {
    return oldHtml.replace(/\b([\w+-éñó\u00F1\u00E9]+)\b/g, '< span class="storyWord">$1< /span>');
})

它似乎可以正常工作,直到我在单词的开头或结尾有口音。

4

1 回答 1

1

问题是javascript RegExp 中的单词字符[a-zA-z0-9_]被简单地定义为,因此\b匹配它们之间的“边界”和重音字符。直接匹配单词是一种改进:

$.fn.highlightWords = function(){
  return this.html(function(i, html){
    return html.replace(/([\w'+-éñó\u00F1\u00E9])+/g, function(m){
        return '<span>'+m+'</span>'
    })
  })
}

$('p').highlightWords()

演示:http: //jsbin.com/elegod

于 2012-05-27T01:42:30.333 回答