2011-01-01 10 views
0

ich versuchte replaceText jQuery-Plugin von http://benalman.com/projects/jquery-replacetext-plugin/jQuery Ersetzen von Text replaceText und Variable

Aber nichts passiert, wenn der Code ausgeführt zu implementieren ist.

Danke für irgendwelche Hinweise. Mit freundlichen Grüßen Marek

/** 
* jQuery Plugin replaceText 
**/ 

(function($){ 
$.fn.replaceText=function(b,a,c){ 
    return this.each(function(){ 
     var f=this.firstChild,g,e,d=[]; 
     if(f){ 
      do{ 
       if(f.nodeType===3){ 
        g=f.nodeValue; 
        e=g.replace(b,a); 
        if(e!==g){ 
         if(!c&&/</.test(e)){ 
          $(f).before(e); 
          d.push(f) 
         }else{ 
          f.nodeValue=e 
         } 
        } 
       } 
      }while(f=f.nextSibling) 
     } 
     d.length&&$(d).remove() 
    }) 
} 
})(jQuery); 

/** 
* variable containing content of q variable from google referer 
**/ 

var querywords = "Some+text+from+google%20referer"; 

/** 
* function for replace each word from body with its "marked" version 
* that is after handled by css propetry for "mark" element 
**/ 

$(document).ready(function () { 
if(window.querywords !== undefined){ 
    var qw = window.querywords.replace('%20','+'); 
    qw = qw.replace(' ','+'); 
    var splited = qw.split("+"); 
    for(var q in splited){ 
     $('body :not(textarea)').replaceText(/\bsplited[q]\b/gi, '<mark>$1</mark>'); 
    } 
} 
}); 

Antwort

2

Anstatt zu versuchen, die Variable direkt in der Regex wie folgt zu verwenden:

$('body :not(textarea)').replaceText(/\bsplited[q]\b/gi, '<mark>$1</mark>'); 

Sie müssen die Regex aus dem String erstellen, wie folgt aus:

$('body :not(textarea)').replaceText(new RegExp("\\b("+splited[q]+")\\b","gi"),'<mark>$1</mark>'); 

Es gibt ein paar andere Probleme, zum Beispiel eine for...in Schleife auf einem Array, insgesamt soll es so aussehen:

$(document).ready(function () { 
    if(window.querywords !== undefined){ 
     var qw = window.querywords.replace('%20','+'); 
     qw = qw.replace(' ','+'); 
     var splited = qw.split("+"); 
     for(var q=0; q<splited.length; q++){ 
      $('body :not(textarea)').replaceText(new RegExp("\\b("+splited[q]+")\\b","gi"),'<mark>$1</mark>'); 
     } 
    } 
}); 

Oder ein bisschen kompakter:

$(function() { 
    if(window.querywords === undefined) return; 
    var qw = window.querywords.replace(/%20| /,'+').split("+"); 
    for(var q=0; q<qw.length; q++){ 
    $('body :not(textarea)').replaceText(new RegExp("\\b("+qw[q]+")\\b","gi"),'<mark>$1</mark>'); 
    } 
}); 

You can test it out here.

+0

Vielen Dank. Aber sag mir, wo ist das Problem mit ... in? Wenn ich es getestet habe, hat die Schleife Wörter richtig durchlaufen, oder gibt es einen Nachteil bei diesem Loop-Typ? –

+1

@Marek - IE zählt in der Reihenfolge hinzugefügt, anstatt die Reihenfolge der Indizes zum Beispiel :) –

+0

Ahh, das ist also wieder IE-abhängig Problem. Danke für die Erklärung, ich kämpfe seit Jahren mit diesem schönen Buggy Explorer. Hoffnung IE9 wird uns so schnell wie möglich befreien. –