2012-07-03 10 views
7

Ich versuche, eine ReplaceWith-Funktion in jQuery schreiben, die bestimmte Wörter mit HTML ersetzen wird.Ersetze Klartext mit HTML mit jQuery

Grundsätzlich versuche ich etwas wie [this] mit <span class='myclass'> zu ersetzen, wie das Dokument geladen wird. Ich habe mich nach ein paar Proben umgeschaut, aber die paar Sachen, die ich gesehen habe, konnte ich nicht zur Arbeit bringen. Ich lerne immer noch jQuery, also hoffe ich, dass jemand mir ein paar Vorschläge geben könnte, was ich versuchen sollte.

Vielen Dank im Voraus, Steven.

HTML/Text:

[this]hello world![/this]​ 

JavaScript:

$(document).ready(function() {  
    // Using just replace 
    $("body").text().replace(/[this]/g,'<b>') 
});​ 

--EDIT--

ich ein paar Änderungen an der Funktion vorgenommen haben unter Nir der Demo verwenden. Heres ein paar mehr Details über das, was ich mache. Ich versuche einen Inline-Bruch zu machen, bei dem ich schon die passenden Klassen habe und was nicht gemacht wurde. Es funktioniert gut in HTML, aber wenn ich die jQuery-Funktion ausführen, scheint es nicht zu funktionieren.

Es ist offensichtlich, dass die Tags ersetzt werden, aber mein CSS scheint wirklich nicht zu arbeiten, wie ich erwähnte.

Heres ein Link zu dem HTML HERE

und heren einem Link zum jsfiddle HERE

$(document).ready(function() {  

// Using just replace 
var text = $('body').text(); 
$("body").html(text.replace(/\[math\]/g,'<span class="container">').replace(/\[\/math\]/g,'</span>')); 

var textt = $('body').text(); 
$("body").html(textt.replace(/\[top\]/g,'<div class="containme">').replace(/\[\/top\]/g,'</div>')); 

var textl = $('body').text(); 
$("body").html(textl.replace(/\[line\]/g,'<div class="borderme">&nbsp;</div>')); 

var textb = $('body').text(); 
$("body").html(textb.replace(/\[bot\]/g,'<div class="containme2">').replace(/\[\/bot\]/g,'</div>')); 
});​ 

Dieses HTML-

<span class="readme">Whats up, here's a fraction.&nbsp; 
<span class="container"> 
    <div class="containme">1</div> 
    <div class="borderme">&nbsp;</div> 
    <div class="containme2">2</div> 
    </span> 
&nbsp;&nbsp;Hello? Whats up, here's a fraction.&nbsp; 
    <span class="container"> 
    <div class="containme">1</div> 
    <div class="borderme">&nbsp;</div> 
    <div class="containme2">2</div> 
    </span> 
    &nbsp;&nbsp;Hello? Whats up, here's a fraction.&nbsp; 
    </span> 

diesen gekürzten Markup

<span class="readme"> Whats up, here's a fraction. [math][top]1[/top][line][bot]2[/bot][/math] </span> 
+0

Wie funktioniert die Zeichenfolge Sie suchen einen Einfluss auf die erwartete Ausgabe? Und Sie fügen nur ein öffnendes Tag ein? Was ist mit dem schließenden Tag für das eingefügte Element? –

+0

(a) Sie haben Ihre Fiddle nicht für die Verwendung von jQuery (b) eingerichtet. '.replace' gibt eine neue Zeichenfolge zurück: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace –

Antwort

6

Javascript ersetzen() eine neue Zeichenfolge zurückgibt, ist es nicht die ursprüngliche Zeichenfolge ändern, so sollte es wohl sein:

$(document).ready(function() {  
    var content = $("body").text().replace(/\[this\]/g,'<b>') 
    $("body").html(content); 
});​ 

Beachten Sie, dass die Klammern haben um es zu umgehen, andernfalls wird jedes Zeichen innerhalb der Klammern durch <b> ersetzt.

Hier ist ein FIDDLE

+0

A [(leicht aktualisiert) JS Fiddle] (http://jsfiddle.net/davidThomas/juTtG/20/), um das zweite 'replace()' in Ihrer verbundenen Fiedel zu vermeiden. –

+0

das ist eine großartige Demo, vielen Dank. Ich werde ein paar Änderungen an meinem OP vornehmen. Ich habe versucht, die Antwort von Nic, bevor ich deins sah, und es ersetzt tatsächlich, wie ich brauchte, aber es scheint, als ob meine CSS nicht richtig funktioniert. Könntest du dir diese Demo anschauen, um mir ein paar Vorschläge zu machen? http://jsfiddle.net/stevenschemers/juTtG/28/ – xxstevenxo

2

hier ist ein demo that uses regex:

$(document).ready(function() {  
    // Using just replace 
    var text = $('body').text(); 
    $("body").html(
     text.replace(/\[this\]/g,'<b>').replace(/\[\/this\]/g,'</b>') 
    ); 
}); 
+0

Bitte nicht Verbinden Sie nicht nur die Lösung, sondern fügen Sie auch den Code in Ihre Antwort ein. Wenn die Links aus irgendeinem Grund nicht verfügbar sind, wird Ihre "Antwort" nutzlos. –

+0

danke für die Demo. Ich habe ein paar Zeilen mehr eingefügt, um die Funktion für das zu vervollständigen, was ich versuche, und es scheint, als ob ich es kaputt gemacht hätte: |. Würde es dir etwas ausmachen, diese Geige zu betrachten? http://jsfiddle.net/stevenschemers/juTtG/24/ – xxstevenxo

+0

was versuchst du zu tun? – Nir