URLs finden und verlinken
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
alternative url
anpassen
code
container
dokument
durchsuchen
expression
ftp
http
index
log
logik
not
null
reichlich rechenleistung
span
struktur
url
verhindern
versehen beispiel
-
Hiho,
ich suche nach einer Lösung für folgendes: Aufgerufenes Dokument nach URLs durchsuchen und selbige mit einem Link zu sich selbst versehen.
Beispiel:
Aus http://www.google.de würde http://www.google.de
Logischerweise sollte/darf das Ganze nicht auf bereits existierende Links angewandt werden.
Jemand eine frameworkfreie Idee?
EDIT:
Vielleicht hätte ich mir das Thema sparen können...
var excludeTags = ['a', 'head', 'noscript', 'option', 'script', 'style', 'title', 'textarea', 'img']; var textNodeXpath = ".//text()[not(ancestor::" + excludeTags.join(') and not(ancestor::') + ")]"; var urlRE= /((?:https?|ftp|file|svn|view-source|chrome|about):\/\/[^\s'"'<>()]+|www\.[^\s'"'<>()]+|[\-\w.+]+@(?:[\-\w]+\.)+[\w]{2,6})/gi; function linkTextNode(node) { var l, m; var txt = node.textContent; var span = null; var p, i = 0; while ( (m=urlRE.exec(txt)) !== null) { if (null === span) { span=document.createElement('span'); } l = m[0].replace(/\.*$/, ''); span.appendChild(document.createTextNode(txt.substring(p, m.index))); a = document.createElement('a'); a.className = 'linkclass'; if(l.slice(-1)==',') { l=l.slice(0,-1); } a.appendChild(document.createTextNode(l)); if (-1 == l.indexOf('://') && -1 == l.indexOf('www.')) { l = 'mailto:' + l; } else if(-1==l.indexOf('://')) { l = 'http://' + l; } a.setAttribute('href', l); span.appendChild(a); p = m.index+m[0].length; } if (span) { span.appendChild(document.createTextNode(txt.substring(p, txt.length))); try { node.parentNode.replaceChild(span, node); } catch (e) { console.error(e); console.log(node); } } } function xpath(query) { return document.evaluate(query, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); } function linkContainer(container) { var node, allLinks = xpath(textNodeXpath); for(i=0; i<allLinks.snapshotLength; i++) { node = allLinks.snapshotItem(i); linkTextNode(node); } } if ('text/xml' != document.contentType && 'application/xml' != document.contentType) { linkContainer(document.body); }
EDIT:
Es scheint noch ein Problem mit excludeTags zu geben, da aus
#content .content-top { background: url("/wow/static/images/character/summary/backgrounds/race/10.jpg") left top no-repeat; } .profile-wrapper { background-image: url("http://us.battle.net/static-render/us/illidan/88/54045016-profilemain.jpg?alt=/wow/static/images/2d/profilemain/race/10-0.jpg"); }
#content .content-top { background: url("/wow/static/images/character/summary/backgrounds/race/10.jpg") left top no-repeat; } .profile-wrapper { background-image: url("<a class="linkclass" href="http://us.battle.net/static-render/us/illidan/88/54045016-profilemain.jpg?alt=/wow/static/images/2d/profilemain/race/10-0.jpg">http://us.battle.net/static-render/us/illidan/88/54045016-profilemain.jpg?alt=/wow/static/images/2d/profilemain/race/10-0.jpg</a>"); }
wird, was sicherlich nur einer von vielen Fehlern ist.
Zudem ist mir die ganze Lösung noch etwas zu klobig...
Beitrag zuletzt geändert: 3.4.2011 5:46:19 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Oh ja, das sieht kompliziert aus und das sollte auch reichlich Rechenleistung kosten, weil du die ganze HTML-Struktur mit einliest und parst. Hier mal eine kurze aber prägnante Alternative
http://blog.bashgeek.net/archives/5-URLs-automatisch-in-HTML-Links-umwandeln.html#comments
Eventuell musst du noch die Regular Expression anpassen, aber das sollte schon gewesen sein. Per RegEx sollte es möglich sein deine Seiteneffekte durch excludeTags zu verhindern. -
Das Problem bleibt das Selbe. Ich hab die Logik noch nicht ganz raus, wie man das am geschicktesten veranstalten könnte...
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage