替换 div 中所有的 URL

6
我正在尝试编写 JavaScript 代码来查找一个div中的所有url。如果div中的所有URL都由空格分隔,那么这将非常容易,我只需在div中使用正则表达式查找它们即可。但是,这个外部div中的URL可能位于子div(或任何其他HTML标记)中,我也希望将子div视为分隔符(而且我不想去掉这些子div)。例如,在以下示例中,我希望在id为“outer”的div中查找www.foo.com和www.bar.com:
<div id="outer"><div>www.foo.com</div>www.bar.com</div>

有什么好的方法可以做到这一点?


7
遍历DOM树并将每个文本节点单独处理? - Passerby
你介意使用jQuery吗? - codeVerine
1
https://dev59.com/X3I-5IYBdhLWcg3wq6do#1732454 - user123444555621
www((?![<,\s]).)* 这应该可以工作。 - Mr_Green
3个回答

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 = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/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内容并将其替换为“test”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接