2012-08-07 110 views
3

我目前有一個腳本,用於在頁面中搜索用戶鍵入的單詞,並在找到該單詞時加亮該單詞。如何爲字符串搜索多個文本節點

但是,當用戶在他們正在搜索的字符串中放置空格時,這會失敗,因爲我正在使用jQuery將文檔文本分割爲節點,並檢查每個節點是否包含當前搜索短語。

我想要做的就是展開這個搜索用戶定義的字符串,而不是在第一個空格之後失敗。不過,我不確定該怎麼做,所以我希望有人能幫助我。

這裏就是我目前有工作,找到節點:

keyup(function({ 

    $(instance.textWrapper).html(instance.getOriginalText());    

    if (this.value.length >= instance.startSearchingLength) { 

     var regx = new RegExp("(" + escape(this.value) + ")", 'gi'); 

     $(instance.textWrapper).each(function() { 
      var textNodes = $(this).find('*').contents().filter(function(){ 
       return this.nodeType === 3 
     }); 

     textNodes.each(function(){ 
      var $this = $(this); 
      var content = $this.text(); 
      content = content.replace(regx, 
             '<span class="' 
             + instance.highlightCssClass + 
             '">$1</span>'); 
      $this.replaceWith(content);  
     }); 
    }); 
} 

startSearchingLength較早的長度搜索必須要搜索的定義。 highlightCssClass恰恰是CSS類在將字符串包裝後才發現的。失敗的

例子:

搜索foo bar將突出foo每個實例在頁面上,但一旦遇到空間,這些亮點走開,滿弦無法找到。

因此,代碼當前搜索每個個人Text Node作爲搜索查詢,但我希望讓腳本在文件的所有文本中找到任何字符串。我不知道如何做到這一點,所以任何幫助將不勝感激!

謝謝!

+0

「regx」呢?不要忘了一個具體的例子,當它失敗時,你在它 – Alexander 2012-08-07 19:08:14

+0

掛起,我會編輯這個真正的快速,對不起,關於 – 2012-08-07 19:10:45

+0

我記得最近分享[這](http://codemirror.net/)鏈接一個相關的帖子。它可以幫助你。 – Prasanth 2012-08-07 19:22:48

回答

1

簡單。您正在使用錯誤的轉義。丟棄escape

this.value.replace(/([[\\^$.|?*+()])/g, "\\$1") 

你必須轉義的是正則表達式的保留字符。

+0

謝謝!我認爲這是一個完全獨立的問題,所以你爲我節省了很多時間。 – 2012-08-08 14:45:51