• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[JQUERY] Strings finden und ersetzen mit Einschränkung

MrFreeze

New member
Hallo,


wie ersetze ich alle vorkommen eine Strings mit einem anderen String - aber - und das ist wichtig _nur_ die Wörter, die nicht in einem a Tag vorhanden sind.
 
Was ich bis dato versuchte ist nicht viel, da ich ersetzten kann aber ich komme nicht drauf wie ich das beschränken kann.

Der HTML Code sieht zB so aus


Code:
<div id="text">

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et dolore 
magna aliquyam erat, <a href="#">sed diam voluptua</a>. At vero eos et accusam 
et justo duo dolores et ea rebum. Stet clita kasd gubergren, no 
sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum 
dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

</div>

in diesem sollen alle Vorkommen von "sed" ersetzt werden aber NICHT die die in einem Link vorhanden sind.
 
Ah okay, dann probiere mal $('#text').html($('#text').html().replace(/(sed)(?![^<]*>|[^<>]*<\/)/g, 'OLA_SED')); aus...
 
Hey ja sowas ähnliches hatte ich schon doch Deines funktioniert.

Ich hatte (?!<a[^>]*>) versucht.
 
Zuletzt bearbeitet von einem Moderator:
Soll das nur für die oben beschriebene HTML-Struktur funktionieren oder für beliebige? Denn der Ansatz von mini funktioniert nur bei der Struktur oben und ersetzt auch keinen Text in <span>s...

Ich würde einfach durch den DOM-Tree durchgehen und einfach alle <a>s ignorieren:
Code:
	function replace(node, str, replace, filter){
		filter = filter? filter: function(){return true;};
		Array.prototype.slice.call(node.childNodes).forEach(function(child){
			if (child.nodeType === 3){
				child.nodeValue = child.nodeValue.replace(str, replace);
			}
			else if (filter(child)){
				replace(child, str, replace, filter);
			}
		});
	}
	replace(document.getElementById("text"), /sed/g, "OLA_SED", function(child){return child.nodeName !== "A"});
- ungetestet.

- - - Aktualisiert - - -

OK - gerade getestet und es scheint zu funktionieren.
 
Zurück
Oben