2013-06-05 10 views
6

Ich versuche, JavaScript-Code zu schreiben, um alle URLs in einem div zu finden. Nun wäre das ziemlich einfach, wenn alle URLs innerhalb der div durch Leerzeichen getrennt wären. In diesem Fall kann ich einfach eine Regex auf dem innerhalb der div finden, um sie zu finden. Die URLs innerhalb dieses äußeren div können jedoch in Unterdivs (oder einem anderen HTML-Tag) sein und ich möchte die Unterteilungen auch als Trennzeichen betrachten (und ich möchte diese Unterbereiche nicht loswerden). Um ein Beispiel zu geben, in der folgenden möchte ich finden www.foo.com und www.bar.com innerhalb des div mit der ID „äußeren“:Ersetze alle URLs in einem div

<div id="outer"><div>www.foo.com</div>www.bar.com</div> 

Was wäre ein guter Weg, dies zu tun?

+7

Gehen Sie über den DOM-Baum und behandeln Sie jeden Textknoten separat? – Passerby

+0

Würde es Ihnen etwas ausmachen jQuery zu verwenden? – codeVerine

+1

http://StackOverflow.com/a/1732454/27862 – user123444555621

Antwort

3

Sie können einen rekursiven Aufruf an alle nicht untergeordneten Textknoten anwenden.

function replaceWwwInNodes(node) { 
    //text node 
    if (node.nodeType === 3) { 
     node.textContent = node.textContent.replace(/* ??? */) 
    } 
    else { 
     Array.prototype.forEach.call(node.childNodes, function (elem) { 
      replaceWwwInNodes(elem); 
     }); 
    } 
} 

replaceWwwInNodes(document.getElementById('outer')); 

http://jsfiddle.net/UDX5V/

0

Versuchen Sie, diese Probe http://jsfiddle.net/iklementiev/TaCx9/1/

var data = document.getElementById("outer").innerText; 
var myRe = /www\.[0-9a-z-]+\.[a-z]{2,4}/igm; 
var matches= data.match(myRe) 

for (var i = 0; i < matches.length; i++) { 
    alert('match: ' + matches[i]); 
} 

diese Hilfe zu nutzen, um alle URLs zu finden.

0

diesen versuchen

var expression = /[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi; 
var regex = new RegExp(expression); 
var regContent = $("#outer").html(); 
var newContent = regContent;                  
if(regContent.match(regex)) 
{  
    var textContent = regContent.match(regex);                   
for(var i=0;i<regContent.match(regex).length;i++) 
{ 
    newContent = newContent.replace(new RegExp(regContent.match(regex)[i], "g"), "test"); 
}  
$("#outer").html(newContent); 
} 

Dies wird allen URL-Inhalt erhalten und es als "Test" ersetzen.

Verwandte Themen