Jquery String Replace Не могу добавить элемент HTML до и после - PullRequest
1 голос
/ 27 июня 2011

Это мой скрипт jquery, который заменяет строку новой строкой:

$("*").contents().each(function() {
if(this.nodeType == 3)
    this.nodeValue = this.nodeValue.replace("1.(800).123.1234", "new");
});

рабочий пример: http://jsfiddle.net/webdesignerart/eKRGT/

но я хочу добавить до и после строки html-элемент, например new

когда я сделаю это:

  this.nodeValue = this.nodeValue.replace("1.(800).123.1234", "<b>new</b>");

Результат получится:

<b>new</b>

Я хочу вывести это: new

Я хочу разрешить HTML-теги во время замены.

это jquery .append работать с этим.

Ответы [ 2 ]

0 голосов
/ 27 июня 2011

Это должно работать:

$("*").contents().each(function() {
    var me = this;
    if(this.nodeType == 3 
       && this.nodeValue.indexOf("1.(800).123.1234")>-1){

        $(this).replaceWith(this.nodeValue.replace("1.(800).123.1234", "<b>new</b>"));  
    }        
});

http://jsfiddle.net/eLkZp/20/

В основном заменить текстовый узел, а не просто текст внутри него.

Вы должны действительно рассмотреть, есть ликакой-то способ сузить этот оригинальный фильтр.Разбор всей вашей страницы, как правило, плохая идея.

0 голосов
/ 27 июня 2011

Вы заменяете содержимое элемента TextNode, который всегда является просто text .Чтобы сделать текст жирным, вам нужно создать еще один элемент, b, который обернет вокруг TextNode.Одним из подходов является использование wrap() из jQuery:

$("*").contents().each(function() {
    var me = this;
    if(this.nodeType == 3)
        this.nodeValue = this.nodeValue.replace("1.(800).123.1234", function(a){
            $(me).wrap('<b />');
            return "new";            
        });
});

пример: http://jsfiddle.net/niklasvh/eLkZp/

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