2012-03-24 16 views
1

Wie kann ich jquery verwenden, um :: 123 ::, 123 (als ID) zu finden, dann ändern Sie es in ein Bild in einem div, das viele Zeilen hat.Get und ersetzen Text containing :: in einem div

Die div:

<div id="msg"> 
<ul> 
    <li class="message">hello</li> 
    <li class="message">123</li> 
    <li class="message">thrid line ::123::</li> 
    <li class="message">yes</li> 
    <li class="message">sure</li> 
    <li class="message">fourth line ::123::</li> 
</ul> 
</div> 

Ergebnisse seien:

<div id="msg"> 
<ul> 
    <li class="message">hello</li> 
    <li class="message">123</li> 
    <li class="message">thrid line <img src="image?id=123"></li> 
    <li class="message">yes</li> 
    <li class="message">sure</li> 
    <li class="message">fourth line <img src="image?id=123"></li> 
</ul> 
</div> 

P/S die Inhalte in den Leitungen sind nur Beispiel.

Wie kann ich das tun?

+0

Verwenden Sie 'regex' und ersetzen Sie – safarov

Antwort

1

folgt ersetzen Diese beliebige Anzahl Sie mit einem verwandten <img> in doppelten Doppelpunkte haben tag:

$('.message').each(function() { 
    $(this).html($(this).html().replace(/::([^:]+)::/g,'<img src="image?id=$1">')); 
}); 

http://jsfiddle.net/khk4a/

Sie könnten hier die HTML-Ersetzungslogik überdenken, die Quelle wäre für eine Suchmaschine oder einen Textleser ziemlich umständlich. Verwenden Sie einen anderen Hook, z. B. einen leeren <i> mit einem Klassen- oder Datenattribut.

1

Hier ist ein Beispiel:

http://jsfiddle.net/5ZAvK/3/

Sie wollen wahrscheinlich würde es verallgemeinern mit einer beliebigen Anzahl zu arbeiten.

BEARBEITEN: Aktualisiert, um die in der Regex gefundene Nummer zu übernehmen und unter Verwendung von $1 in die Verknüpfung einzufügen.

EDIT 2: Nochmals aktualisiert, um mit einer beliebigen Nummer zu arbeiten.

+0

Es sucht immer noch nur nach" 123 "obwohl ... – David

+0

Aktualisiert wieder für eine beliebige Anzahl zu arbeiten. Ich dachte, ich würde das OP etwas Arbeit verallgemeinern lassen, aber änderte es. –

2

Versuchen Sie den folgenden Code.

$("li.message").each(function() 
{ 
    var newText = $(this).text().replace(/::123::/g, '<img src="image?id=123">'); 
    $(this).text(newText); 
}); 
+0

Ich denke, Sie müssen '.html()' anstelle von '.text()' verwenden, um das IMG-Tag einzufügen, ohne dass jQuery die Zeichenfolge entkommt. – David

1

lösen kann Wenn Sie den Zugriff auf die zugrunde liegende HTML-Struktur haben, würde ich Dich :: 123 :: mit einem anderen leeren HTML-Elemente empfehlen ersetzen, mit einem besonderen Klasse. Zum Beispiel

<li class="message">thrid line ::123::</li> 

wäre dann

<li class="message">thrid line <span class='replaceMe' data-key="myId"></span></li> 

Dann jquery verwenden Sie die Elemente zu ersetzen, wie

var replaceableElements = $('.replaceMe'); 
replaceableElements.each(function(){ 
    var me = $(this), 
     myId = me.data('key'); 
    me.replaceWith('<img src=image?id="'+ myId +' />'); 
});