2016-06-03 9 views
1

Ich habe folgende HTML hinzuzufügen:Wie HTML-Tags vor und nach bestimmten Zeichenfolge mit Jquery

<h5 class="pi-accordion-title"> 
    <a href="#" class="z"> 
     <span class="pi-accordion-toggle"></span> 
      My Link (Keyword) 
    </a> 
</h5> 

, die Teil eines Akkordeons Link ist. Was ich versuche zu tun, ist zu öffnen Span-Tag vor dem (Stichwort) und schließen Sie es danach.

ich mit dem folgende JAVASCRIPT versuchen:

<script> 
    $("(Keyword)").before("<span class='orange'>"); 
    $("(Keyword)").after("</span>");   
</script> 

aber es funktioniert nicht ... Konsolenprotokoll zeigt die folgenden Fehler: Syntaxfehler, unerkannt Ausdruck: (Keyword)

+0

Warum steckst du es nicht in eine Spanne? – progrAmmar

+0

Mit Ihrem Code müssen Sie die innereHTML des Ankers aktualisieren 'a' – progrAmmar

+0

@progrAmmar Ich möchte nicht HTML-Code in meiner Datenbank hinzufügen. Mein Link wird dynamisch aus der Datenbank gezogen. Und ich habe verschiedene Wörter in (Keyword), also werde ich eine Spanne mit verschiedenen Klassen setzen, abhängig vom Wort. – user2417624

Antwort

1
$('.pi-accordion-title').each(function() { 
    this.innerHTML = this.innerHTML.replace(/(\(Keyword\))/, '<span class="orange">$1</span>'); 
}); 
+0

Seltsam, aber keine Spanne wurde eingefügt ... sollte ich Körper auf Last oder etwas verwenden? – user2417624

+0

Es funktioniert: https://jsfiddle.net/uwexnj0r/1/ – Deep

+0

Ja, ich kann das hier sehen, aber es funktioniert nicht auf meinem Computer, ich werde es neu starten, ich kann keinen anderen offensichtlichen Grund warum sehen Das funktioniert nicht auf meiner Seite. – user2417624

1

Sie können nicht Wählen Sie einen solchen Text mit jQuery. Hier ist eine sehr einfache Möglichkeit, die does not even need jQuery zu tun.

Der Nachteil dieses Ansatzes besteht darin, dass der gesamte Inhalt des Containers neu geschrieben wird. Wenn Sie also ein Ereignis an einige untergeordnete Elemente des Containers anhängen möchten, müssen Sie dies nach dem Einfügen der Spannen tun. Daher würde ich empfehlen, einen Behälter so klein wie möglich zu wählen.

var toReplace = '(Schlüsselwort)'; var containers = document.getElementsByClassName ("pi-accordion-title"); Array.prototype.forEach.call (Container, Funktion (Container)) { container.innerHTML = container.innerHTML.replace (toReplace, '$ &'); });

.pi-accordion-title a span { 
    color:red; 
} 
<h5 class="pi-accordion-title"> 
    <a href="#" class="z"> 
     <span class="pi-accordion-toggle"></span> 
      My Link (Keyword) 
    </a> 
</h5> 

EDIT

Wenn Sie die oben genannten Element überschreiben Nachteil vermeiden möchten, können Sie die ":contains" jQuery-Selektor nutzen. Wenn Sie jQuery verwenden, denke ich, dass es die beste/sicherste Methode ist, da Sie nur die übergeordneten Elemente neu schreiben.

var toReplace = '(Keyword)'; 
$(":contains(" + toReplace + ")").each(function(){ 
    this.innerHTML = this.innerHTML.replace(toReplace, '<span>$&</span>'); 
}); 
.pi-accordion-title a span { 
    color:red; 
} 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<h5 class="pi-accordion-title"> 
    <a href="#" class="z"> 
     <span class="pi-accordion-toggle"></span> 
      My Link (Keyword) 
    </a> 
</h5> 
+0

Dieser Code erzeugt einen Fehler, der lautet: TypeError: container ist null – user2417624

+0

Sie sollten einen alten/ungeraden Browser verwenden, der "document.body" nicht unterstützt. Hier ist eine neue Version mit 'getElementsByClassName'. Wenn Ihr Browser dies nicht unterstützt, kann ich Ihnen nicht helfen :). –

+0

Ich weiß nicht, was falsch ist, aber keine Spannweite ist vor oder nach (Keyword) in meinem Browser eingefügt. Ich überprüfe es mit Firefox, Chrome und Opera, nichts ...alle meine Browser sind auf dem neuesten Stand – user2417624

0

ich mit jquery.Grab Namen der Klasse versucht haben und den Text oder HTML bekommen, dann können Sie durch .replace mit find Wort ersetzen

var title = $(".pi-accordion-title"); 
var text = title.html(); 
title.html(text.replace(/(\(Keyword\))/g,"<span class='orange'>$&</span>"));