2010-07-29 3 views
3

Я хотел бы найти с jquery некоторый конкретный текст и заменить его обновленной версией, включая некоторый HTML.Найдите текст (A) и замените его текстом (B) + HTML

Я попытался this, который работает, когда я использую только текст:

<script type="text/javascript" > 
    jQuery(document).ready(function(){ 

    jQuery("*").contents().each(function() { 
    if(this.nodeType == 3) 
    this.nodeValue = this.nodeValue.replace("hello mum", "bye bye mum"); 
    }); 

    }) 
</script> 

Однако, если добавить некоторый текст + HTML заменить целенаправленное выражение, он получает «отформатированным» и читается как простой текст ...

Знаете ли вы, ребята, какое-то решение этой проблемы? Можно ли добавить HTML в замещающее выражение?

Спасибо.

ответ

4

jQuery немного проблематичен, когда дело доходит до текстовых узлов. Кроме того, поскольку вы непосредственно манипулируете содержимым текстового узла, весь HTML будет рассматриваться как текст.

Самое простое решение, которое я могу придумать немного Hacky, но работает отлично :)

Заменить текстовый узел с фиктивным HTML элемента. Затем замените этот фиктивный HTML-элемент на ваш заменяющий HTML.

var isTextNode = this.nodeType == 3; 
var matchesText = this.nodeValue.indexOf('hello mum') > -1; 

if(isTextNode && matchesText) { 
    // replace text node with dummy element 
    // so jQuery can be used 
    var dummy = $('<b>'); 
    this.parentNode.replaceChild(dummy[0], this); 

    dummy.replaceWith('my <b>awesome</b> html now <i>works</i>'); 
} 
+0

Не забудете '> -1' для'. indexOf() 'в случае, если текст находится в индексе' 0'. : o) EDIT: Также 'this.nodeType = 3' должен быть' this.nodeType == 3' – user113716

+0

@patrick - спасибо :) исправил эти проблемы. – Anurag

0

this.nodeValue = this.nodeValue.replace ("hello mum", "bye bye mum");

изменен

this.nodeValue = this.nodeValue.replaceWith ("привет мама", "

некоторые HTML материал

");

+0

это то, что я пытался, но вторая часть буквально выход, даже если они являются некоторые HTML-теги, они будут читаться посетителем – Peanuts

Смежные вопросы