2013-06-05 31 views
6

Tôi đang cố gắng viết mã javascript để tìm tất cả các url bên trong một div. Bây giờ điều này sẽ khá dễ dàng nếu tất cả các url trong div được phân cách bởi các khoảng trống trong trường hợp đó tôi chỉ có thể làm một regex về những gì bên trong div để tìm chúng. Tuy nhiên, các url trong div bên ngoài này có thể nằm trong div phụ (hoặc bất kỳ thẻ html nào khác) và tôi cũng muốn xem xét các subdiv là dấu phân cách (và tôi không muốn loại bỏ các subdiv này). Để đưa ra ví dụ, trong phần sau tôi muốn tìm www.foo.com và www.bar.com trong div có id "outer":Thay thế tất cả các url trong một div

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

Điều gì sẽ là cách hay để làm điều này?

+7

Đi qua cây DOM và xử lý từng nút văn bản một cách riêng biệt? – Passerby

+0

Bạn có phiền khi sử dụng jQuery không? – codeVerine

+1

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

Trả lời

3

Bạn có thể áp dụng cuộc gọi đệ quy cho tất cả các nút con không phải văn bản.

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

Cố gắng sử dụng mẫu này 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]); 
} 

trợ giúp này để tìm tất cả các url.

0

thử này

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

này sẽ nhận được tất cả nội dung url và thay thế nó là "thử nghiệm".

Các vấn đề liên quan