2013-06-05 5 views
6

div内のすべてのURLを見つけるためにjavascriptコードを作成しようとしています。これは、div内のすべてのURLがスペースで区切られている場合、これはかなり簡単になります。その場合、div内にあるものについて正規表現を実行して見つけることができます。しかし、この外側のdiv内のURLは、sub div(または他のhtmlタグ)内にある可能性があります。サブディビジョンもセパレータとして考慮する必要があります(これらのサブディビジョンを取り除きたいとは思いません)。例を挙げると、以下に私はIDが「外」とのdiv内www.foo.comとwww.bar.comを見つけたい:div内のすべてのURLを置換する

<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

は、すべてのURLを見つけるために、このサンプル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]); 
} 

にこのヘルプを使用してみてください。

0

これは、すべてのURLのコンテンツを取得し、 "テスト" として、それを置き換えます。この

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

を試してみてください。

関連する問題