2013-06-05 47 views
6

我正在嘗試編寫javascript代碼來查找div中的所有網址。現在,如果div內的所有url都被空格分開,這很容易,在這種情況下,我可以對div內的內容進行正則表達式來找到它們。然而,這個外部div中的url可能在子div(或任何其他html標籤)中,我想將subdivs作爲分隔符(我不想擺脫這些subdivs)。舉個例子,下面我想找到www.foo.com和www.bar.com在專區內ID爲「外」:替換div中的所有網址

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

什麼是這樣做的好辦法嗎?

+7

走過DOM樹並分別處理每個文本節點? – Passerby

+0

你介意使用jQuery嗎? – codeVerine

+1

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

回答

3

您可以對所有非文本子節點應用遞歸調用。

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

嘗試使用此示例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]); 
} 

此幫助找到的所有URL。

0

試試這個

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); 
} 

這將讓所有的URL內容,並取代它成爲 「測試」。