2011-05-19 81 views
2

我想用jQuery來生活突出顯示的單詞。我使用一個實時的按鍵事件來觸發突出顯示,以便突出顯示在輸入單詞時發生變化(使用輸入文本字段)用jQuery實時突出顯示一個或多個單詞

我發現了一段代碼,它工作正常,但此代碼不起作用實時關鍵事件,所以它包裝的第一個字母,並停在那裏。

這裏是我的HTML:

<input type="text" id="input" name="input"/> 
<div id="content-block"><p>lorem ip sum </p></div> 

這裏是我的JS:

$('#input').live('keyup', function() { 
    $('#input').trigger('highLight'); 
}); 

$('#input').bind('highLight', function() { 
    var o = {words:$('input[name="input"]').val()}; 
    highlight("content-block", o); 
}); 

function highlight(id, options) { 

    var o = { 
       words: '', 
       caseSensitive: false, 
       wordsOnly: true, 
       template: '$1<span class="highlight">$2</span>$3' 
      }, 
     pattern; 

    $.extend(true, o, options || {}); 

    if (o.words.length == 0) { return; } 
    pattern = new RegExp('(>[^<.]*)(' + o.words + ')([^<.]*)', o.caseSensitive ? "" : "ig"); 

    $('#'+id).each(function() { 

     var content = $(this).html(); 

     if (!content) return; 
     $(this).html(content.replace(pattern, o.template)); 

    }); 

} 
+0

請參閱我的更新答案的解決方案,而不僅僅是問題的識別。 – 2011-05-19 22:03:40

回答

3

的問題是,在首次成功更換模式現在必須也匹配第一個匹配的字符後已插入結束span標籤。

的HTML看起來像這樣輸入「L」後:

<p><span class="highlight">l</span>orem ip sum</p> 

「排版」將不再因爲跨度相匹配。

與解決方案現在:

這裏是一個修復程序應該得到它做你想要的東西:

$('#' + id).each(function() { 
    $('span.highlight',this).replaceWith($('span.highlight',this).text()); // Fix 

    var content = $(this).html(); 

    if (!content) return; 
    $(this).html(content.replace(pattern, o.template)); 
}); 

假設你只會有一個亮點跨度,線下刪除並用它所包含的文本替換它。然後替換正常發生。

$('span.highlight',this).replaceWith($('span.highlight',this).text() 

工作示例是在這裏:http://jsfiddle.net/ryanrolds/N4DCR/

+0

您的解決方案不適用於同一段落中的多個高亮,如[指向此處](http://stackoverflow.com/q/22280829/1420197)並轉載[here](http://jsfiddle.net/N4DCR/148 /)(搜索* ip *,只有最後一個字被高亮顯示)。也許修復會對其他用戶有用。 – 2014-03-09 10:13:46

0

應指定全局標誌的正則表達式,即使你是區分大小寫的模式。這可能是爲什麼只有第一個字符被替換。嘗試使用這樣的:

pattern = new RegExp('(>[^<.]*)(' + o.words + ')([^<.]*)', (o.caseSensitive ? "" : "i") + "g"); 
+0

仍然包裝的第一個字母,我看到我的示例代碼已被編輯,並缺少一些部分... – user759235 2011-05-19 21:00:33

+0

對此感到抱歉,格式化爲可讀性...應儘快解決。 – 2011-05-19 21:03:33

相關問題