Заменить содержимое каждого элемента управления HTML javascript jquery - PullRequest
1 голос
/ 19 января 2011

Я снова пытаюсь заменить каждое текстовое содержимое каждого элемента управления на странице, используя javascript и jquery.

Мне нужно искать в каждом текстовом содержимом (БЕЗ МОДИФИЦИРУЮЩИХ ТЕГОВ, ТОЛЬКО ТЕКСТ) любое слово и заменять его другим словом.

Одна попытка:

jQuery.fn.replaceEachOne = function (objective, rep) {
   this.each( function(){ 
                //$(this).html( $(this).html().replace( new RegExp('(\\s'+objective+'\\s(?![[\\w\\s?&.\\/;#~%"=-]*>]))', "ig"), rep) );
    $(this).html( $(this).html().replace( new RegExp('('+objective+'(?![[\\w\\s?&.\\/;#~%"=-]*>]))', "ig"), rep) );
            }
        );
}

Пожалуйста, помогите !!

Ответы [ 3 ]

1 голос
/ 19 января 2011

Что-то вроде этого должно помочь:

$.fn.replaceEachOne = function(search, replace) {
    this.contents().each(function(){
        if (this.nodeType == Node.ELEMENT_NODE) {
            $(this).replaceEachOne(search, replace);
        } else if (this.nodeType == Node.TEXT_NODE) {
            this.nodeValue = this.nodeValue.replace(search, replace);
        }
    });
};

Это делает замену текстовых узлов напрямую, а не изменяет HTML всего элемента.Обратите внимание, что он чувствителен к регистру.Вам нужно изменить вызов на replace, чтобы использовать регулярное выражение, если вы хотите поиск без учета регистра.

0 голосов
/ 19 января 2011

Наконец ...

jQuery.fn.replaceEachOne = function (objective, reposition) {
    this.contents().each(function(){
        if (this.nodeType == Node.ELEMENT_NODE) {
            $(this).replaceEachOne(objective, reposition);
        } else if (this.nodeType == Node.TEXT_NODE) {
            var label = document.createElement("label");
            label.innerHTML = this.nodeValue.replace(objective, reposition);
            this.parentNode.insertBefore(label, this);
            this.parentNode.removeChild(this);
        }
    }); 
}
0 голосов
/ 19 января 2011

Я бы начал что-то вроде этого:

jQuery.fn.replaceEachOne = function(objective, rep) {
    var html = jQuery(this).html();
    var simpleRegexp = new RegExp(objective, "gi");
    var regexp = new RegExp(">[^><]*?"+objective+"[^><]*?<","gi");
    html = html.replace(regexp, function(match) {
        return match.replace(simpleRegexp, rep);
    });
    jQuery(this).html(html);
}

Этот код находит соответствующий текст в html-коде тела между '>' и '<' символами и затем заменяет сопоставленный текст.

Конечно, это простое решение и оно заменит текст также в <script> или <style> блоках. Я думаю, что это хорошая идея, чтобы начать с.

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