kostenloser Webspace werbefrei: lima-city


URLs finden und verlinken

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. a******n

    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.
  4. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    Das Problem bleibt das Selbe. Ich hab die Logik noch nicht ganz raus, wie man das am geschicktesten veranstalten könnte...
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!