JQuery заменить текст, используя replaceText и переменную - PullRequest
0 голосов
/ 01 января 2011

Я попытался реализовать плагин replaceText jQuery из http://benalman.com/projects/jquery-replacetext-plugin/

Но при выполнении кода ничего не происходит.

Спасибо за любые подсказки.С уважением, Марек

/**
 * 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>');
    }
}
});

1 Ответ

2 голосов
/ 02 января 2011

Вместо того, чтобы пытаться использовать переменную непосредственно в регулярном выражении, вот так:

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

Вам нужно создать регулярное выражение из строки, например:

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

Есть также несколько других проблем, например, цикл for...in в массиве, в целом вы хотите, чтобы он выглядел так:

$(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>');
        }
    }
});

Или, более компактный:

$(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>');
  }
});

Вы можете проверить это здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...