2014-11-14 1 views
0

Мне нужно заменить текст внутри моей страницы содержимым из массива.Замените текст разборным HTML из массива

Мой массив содержит 70 wordpais как:

var wordMark = []; 
    wordMark[0] = ['mytext','<b>my</b>Text']; 
    wordMark[1] = ['anothertext','<b>another</b>Text']; 
    wordMark[2] = ['therealtext','Therealtext']; 

Моя функция заключается в следующем:

// Schriftzüge ersetzen 
    function setWordMarks() { 
     //for(var wordMarkI=0; wordMarkI<=wordMark.length-1; wordMarkI++){ 
     for(var wordMarkI=0; wordMarkI<=5; wordMarkI++){ 

      //alert(wordMark[wordMarkI][0]); 

      $('body, body *') 
       .contents() 
       .filter(function() { 
        return this.nodeType == Node.TEXT_NODE 
         && this.nodeValue.toLowerCase().indexOf(wordMark[wordMarkI][0]) >= 0; 
       }).each(function() { 
        this.nodeValue = this.nodeValue.toLowerCase().replace(wordMark[wordMarkI][0], wordMark[wordMarkI][1]); 
       }); 
     }; 
    } 

В общем собирается заменить текстовые части с CI-совместимым текстом.

Моя проблема заключается в том, что b-tag не анализируется, а написан в ясном тексте.

Я надеюсь, я Coult объяснить мою проблему, большое спасибо, Сплетник

EDIT: Вот демо:

$(document).ready(function(){ 
 
     var wordMark = []; 
 
     wordMark[0] = ['mytext','<b>my</b>Text']; 
 
     wordMark[1] = ['anothertext','<b>another</b>Text']; 
 
     wordMark[2] = ['therealtext','therealText']; 
 
     
 

 
// Schriftzüge ersetzen 
 
function setWordMarks() { 
 
     
 
for(var wordMarkI=0; wordMarkI<=5; wordMarkI++){ 
 
    $('body, body *') 
 
    .contents() 
 
    .filter(function() { 
 
     return this.nodeType == Node.TEXT_NODE 
 
      && this.nodeValue.toLowerCase().indexOf(wordMark[wordMarkI][0]) >= 0; 
 
    }).each(function() { 
 
    this.nodeValue = this.nodeValue.toLowerCase().replace(wordMark[wordMarkI][0], wordMark[wordMarkI][1]); 
 
    }); 
 
    }; 
 
}; 
 
     
 
     
 
$('span.checkTheText').click(function(){ 
 
    setWordMarks(); 
 
    }); 
 
     
 
});
.checkTheText{ 
 
     display: block; 
 
     margin: 10px; 
 
     padding: 5px; 
 
     border: 1px solid red; 
 
     width: 100px; 
 
     }
<html> 
 
     <head> 
 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
     </head> 
 
     
 
     <body> 
 
     <h2>This is myText</h2> 
 
     <div> some lorem ipsum like text including anothertext</div> 
 
     <div>No i add TheRealText to give all three examples</div> 
 
     
 
     <span class="checkTheText">Do the magic</span> 
 
     </body> 
 
    </html>

+0

Не могли бы вы изменить свой вопрос, чтобы включить демо (с помощью кнопки «Стек Snippet», один с карандашом, чтобы вызвать редактор) , или ссылку на живую демонстрацию в другом месте (например, [JS Fiddle] (http://jsfiddle.net/))? Таким образом, мы чувствуем, что происходит. –

+0

@DavidThomas Я вставляю фрагмент. – Schmoozer

ответ

0

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

JQuery

<script type="text/javascript"> 
    $(function() { 
     var wordMark = []; 
     wordMark[0] = ['mytext', '<b>my</b>Text']; 
     wordMark[1] = ['anothertext', '<b>another</b>Text']; 
     wordMark[2] = ['therealtext', 'Therealtext']; 
     var content = $('#content').html(); 
     for (i=0; i < wordMark.length; i++) { 
      var pattern = wordMark[i][0]; 
      var regExp = new RegExp(pattern, "i"); 
      content = content.replace(regExp, wordMark[i][1]); 
     } 
     $('#content').html(content); 

    }); 
</script> 

HTML

<div id="content"> 
    This is mytext and there are anothertext so therealtext is ok. 
</div> 
+0

Проблема ist не замена, это прекрасно работает с кодом. Проблема в том, что замененный текст не анализируется, поэтому мой текст на странице «другой Текст» вместо ** другой ** Текст – Schmoozer

+0

Не знаю почему. Возможно, вы должны разобрать этот текст с помощью синтаксического анализатора. Во всяком случае, мои работы. – vaso123

+0

ваш код работает с моим кодом, но заменяет только первое появление wordMark [i] [0]. Я должен был упомянуть в моей просьбе, что у меня есть как минимум 3 появления каждого члена массива. – Schmoozer

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