2015-07-06 10 views
5

Ich habe ein Div mit ID content. Ich möchte in diesem div My Company suchen und dann nach My Company die Marke ® Symbol überall dort einfügen, wo es in der div id = content erscheint. Das Problem ist der Text My Company ist nicht immer in HTML als My Company. Es könnte sein My <span style="something">C</span>ompany oder My <font color="something">C</font>ompany und ich weiß nicht, wie man das ® Symbol nach dem Text My Company fügt, auch wenn es HTML-Tags in (wie oben) enthält.Fügen Sie Text in einem Div, wo etwas finden

Ich möchte dies mit JS/Jquery tun. Ich danke dir sehr!!!

Versuchte:

$("#content").each(function() { 
    var text = $(this).text(); 
    text = text.replace("My Company", "My Company®"); 
    $(this).text(text); 
}); 

aber es funktioniert nur, wenn es My Company ist nicht, wenn es My <span style="something">C</span>ompany oder My <font color="something">C</font>ompany

EDIT

Ich habe einen (Single) div #content

BEISPIEL

<div id="content"> 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi et nisl quam. Praesent semper enim elit, vel imperdiet ipsum vulputate ac. Curabitur lacinia vitae metus sit amet consectetur. 

My Company 

Sed metus risus, iaculis a erat id, pretium congue nisi. Phasellus tempor, massa lobortis scelerisque pharetra, orci metus ultrices quam, eu sodales massa erat ut ipsum. Vestibulum ullamcorper interdum pretium. My <span style="color: orange;">C</span>ompany Praesent mollis in ex in feugiat. Ut vitae placerat diam. 
</div> 
+2

Wie viele divs mit 'id = content' hast du? –

+0

Sie können nicht mehr als eine #content-ID haben. – Selvakumar

+0

Kannst du deinen HTML-Teil zeigen? –

Antwort

1

Verwenden Sie Klassen, wenn Sie mehrere divs mit demselben Stil auf der Seite haben möchten.

$("#content").each(function() { 
    var text = $(this).html(); 
    text = text.replace(/My Company/g, "My Company<sup>®</sup>"); 
    text = text.replace(/My (<\/?span[^>]*>C\<\/span\>ompany)/g, "My Company<sup>®</sup>"); 
    text = text.replace(/My (<\/?font[^>]*>C\<\/font\>ompany)/g, "My Company<sup>®</sup>"); 
    $(this).html(text); 
}); 
+0

Dies ersetzt HTML-Tags der zweiten "My Company" – Hemal

0

Hallo, können Sie das hinzufügen, richtig?

$("#content").each(function() { 
    var text = $(this).text(); 
    if(text === 'My Company') { 
     $(this).append('<span class="copyrightSymbol"> ® </span>'); 
    } 
}); 

Dies wird funktionieren. Aber #content ist nur einmal auf einer Seite erlaubt, da es eine ID ist.

+2

Dies funktioniert nur, wenn die Zeichenfolge genau "Meine Firma" ist. OP fragt etwas anderes –

+0

ja PP möchte Markensymbol nach meiner Firma innerhalb #content hinzufügen. Ich denke, das wird funktionieren. Bitte vorschlagen. Er möchte seine Struktur nicht ändern.So wird es auch funktionieren – Selvakumar

+1

OP bittet darum, es auch anzuhängen, wenn HTML so ist 'Mein C ompany oder Mein C ompany' –

0

Versuchen Sie, diese

$("#content").each(function() { 
    var text = $(this).text(); 
    text = text.replace(/My Company/g, "My Company®"); 
    $(this).text(text); 
}); 

dem früheren Schritt, die Sie war richtig gemacht wurden, aber Sie den globalen Teil ersetzen verpasst. jQuery text() wird nur den Textteil innerhalb des Tags div erhalten. Sie müssen sich also keine Gedanken über die inneren Tags machen, die umhüllt werden.

JSFiddle: https://jsfiddle.net/srb8fusn/

+3

Aber dies wird seine vorherige Struktur für 'C' im Text ändern. Die Spanne wird durch Text ersetzt, oder? – Selvakumar

1

Dies ist, wie Sie es tun können

$(function(){ 
$('#content').each(function() { 
    var text = $(this).text(); 
    $(this).text(text.replace('My Company', 'My Company®')); 
}); 

}); 

EDIT:

Mai werden thi Code aktualisiert wird funktionieren, wenn Sie die HTML erhalten wollen sowie

$(function(){ 
    var children = $('#content').children(); 
    children.each(function() { 
    var text = $.trim($(this).text()); 
     if(text === 'My Company'){ 
      var getTagName = $(this).prop("tagName"); 
      var tagName = getTagName.toLowerCase(); 
      var replaceText = '<'+tagName+'>'+'My Company®'+'</'+tagName+'>'; 
     $(this).html(replaceText); 
     } 
     }); 
}); 

Überprüfen Sie die aktualisierte Fiddle http://jsfiddle.net/69sv52y2/16/

+0

@ downvoter: Bitte erwähnen Sie den Grund für Ihren Downvote? – Abhinav

+1

OP erwähnt klar, dass HTML beibehalten werden muss. –

+0

Kann der aktualisierte Code auch den HTML-Code beibehalten? Bitte korrigieren Sie mich, wenn ich falsch bin – Abhinav

0

Sie sind mit diesem Problem konfrontiert aufgrund mehrerer Räume zwischen my company out Wenn ein <span> Tag innerhalb des div ist dann denke ich Ihre HTML so etwas wie dieses <div class='content'> My <span> Company </span></div> ist, so gibt es sind zwei Leerzeichen zwischen My und Company und Ihr String ersetzen funktioniert nicht dafür.

So müssen Sie zuerst mehrere Leerzeichen durch einzelnes Leerzeichen ersetzen.

für diese Bedingungen arbeiten zu

My <font color="something">C</font>ompany 

My <span style="something">C</span>ompany 

Zweitens Wenn Sie mehr verwenden dives dann sollten Sie class anstelle von id

diesen Code Versuchen:

$(".content").each(function() { 
     var text = $(this).text(); 
     console.log(text); 
     text = text.replace(/ +(?=)/g,'').replace(/My Company/g, "My Company®"); 
     $(this).text(text); 
    }); 

DEMO :http://jsfiddle.net/ishandemon/e9t7wjo8/

0

Sie müssen zuerst HTML-Tags um 'My Content' strippen, falls es welche gibt.

Dann mit Klartext, suchen Sie danach.

Und wenn gefunden, können Sie am Ende eine Marke anhängen.

Dies wird Ihnen auch Original-HTML-Markup von 'MY CONTENT'

Zustand erhalten: SIE MÜSSEN

SINGLE 'Mein Inhalt' innerhalb div #content HABEN

WORKING FIDDLE

CODE

Grundsätzlich werde ich eine HTML-Strip-Funktion erstellen, um zusätzliche HTML-Tags um Text zu entfernen und dann wie gezeigt zu suchen im Code unten.

Verwandte Themen