Hallo liebes Forum,
Ich brauche ein bisschen Hilfe. Muss dazu sagen dass ich in Javascript leider noch Anfänger bin, mir vieles erst aneignen muss.
Es geht darum ein Glossar zu einem Produkttext in einem Onlineshop zu erstellen. DAs ganze wurde auch schon vorbereitet. Über eine Javascriptfunktion werden bestimmte Zeichenketten in dem Text gesucht und mit den ID's von Div-Containern gematcht. Das entsprechende Wort wird unterstrichen ausgegeben und erhält einen Tooltip, welches die Bedeutung erklärt. An sich eine simple Geschichte (schön gelöst ist die andere Frage...). Nun ist es aber so dass auch Wörter wie AUS in HAUS (zb.) gefunden werden, was natürlich keinen Sinn macht...
Ich habe mir jetzt ein bisschen gefährliches Halbwissen über Wortgrenzen mit RegExp angelesen und herumprobiert. ERfolglos. Ich brauche euch, um mir auf die Sprünge zu helfen.
Nachfolgend der Code-schnipsel (exemplarisch!)
<div id="toolTip" style="display:none;">
</div>
<div class="produkttext">
Ein Haus ist ein Gebäude. Aus diesem gehen Menschen hinaus.
</div>
<div id="glossar" style="display: none;">
<div id="aus">
bla bla bla
</div>
</div>
<script type="text/javascript">
function hideLexInfo() {
var info_layer = document.getElementById("toolTip");
toolTip.style.display = 'none';
}
function showLexInfo(entry, acelement) {
var doc = document;
var info = doc.getElementById(entry).innerHTML;
var toolTip = doc.getElementById("toolTip");
toolTip.innerHTML = '<b>'+entry+'</b><br /><br />'+info;
toolTip.style.zIndex = 9000;
toolTip.style.display = 'block';
$(acelement).mousemove(function(e){
var x = acelement.offsetLeft-280;
var y =acelement.offsetTop-380;
toolTip.style.marginTop = y+'px';
toolTip.style.marginLeft = x+'px';
});
}
function getLexInfo() {
var doc = document;
var infolayer = $('#glossar').children();
var descs = $('.produkttext');
for (var j=0; j<descs.length; j++) {
for (var i=0;i<infolayer.length; i++) {
var exp = new RegExp(infolayer[i].id, "g");
descs[j].innerHTML = descs[j].innerHTML.replace(exp, '<span class="cue" onMouseOver="javascript:showLexInfo(this.innerHTML, this)" onMouseOut="javascript:hideLexInfo()">'+infolayer[i].id+'</span>');
}
}
}
getLexInfo();
</script>
Tja das Problem ist, dass nun in der Ausgabe nat. auch im Wort HAUS und HINAUS der Teil AUS erkannt und entsprechend verarbeitet wird.
Nur was genau muss ich tun, damit er im Produkttext eben nicht innerhalb von Worten die Zeichenkette sucht sondern nur in ganzen Wörtern also immer nur das Wort AUS? Und HAUS und HINAUS in Ruhe lässt? ;)
Ja ich weiss, es gibt hier (http://de.selfhtml.org/javascript/objekte/regexp.htm) eig. die Lösung, aber ich schaffe es nicht das auf meine Funktion zu übertragen.
Ich habe das hier probiert:
var exp = new RegExp(/\binfolayer[i].id\b/, "g");
Aber da spuckt mir die FF-Fehlerkonsole nur einen "Illegal Charakter"-Fehler aus...
Es wäre so toll wenn Ihr mir auf die Sprünge helft. DANKE!