使用vanilla Javascript&更改所有链接,href,网址正则表达式

时间:2011-02-08 23:42:11

标签: javascript regex

我正在尝试使用一些vanilla Javascript替换整个页面上的url值。我不能使用任何库/框架。到目前为止,这是我在标签之间的每个页面顶部放置的内容:

<script type="text/javascript">
function change_url() {
    var str = '';
    str = str.replace(/blog\.domain\.info/g, 'blogtest\.domain\.info');
}
change_url();
</script>

但是,当页面加载时,这不起作用。

基本上,我需要资源链接从http://blog.domain.info转到http://blogtest.domain.info。简单的任务,我知道!但是上面的代码到目前为止还不起作用。

有关改变内容的建议?

4 个答案:

答案 0 :(得分:14)

阅读完评论后,您需要

之类的内容
function replace_url(elem, attr) {
    var elems = document.getElementsByTagName(elem);
    for (var i = 0; i < elems.length; i++)
        elems[i][attr] = elems[i][attr].replace('blog.domain.info', 'blogtest.domain.info');
}

window.onload = function() {
    replace_url('a', 'href');
    replace_url('img', 'src');
    // etc
}

答案 1 :(得分:2)

如果您要定位链接,可以执行以下操作:

<script type="text/javascript">
    var els = document.getElementsByTagName('a'),
        len = els.length;

    while( len-- ) {
        els[len].hostname = els[len].hostname.replace('blog.domain.info','blogtest.domain.info');
    }
</script>

将此脚本放在结束</body>标记内。

对于其他标记,请指定要更新的标记名称和属性。

答案 2 :(得分:1)

我参加聚会太晚了,但希望对别人有帮助。

您的代码很完美,它只需要处理文本并提供反馈的方式,所以这就是我会做的,请注意,我不是专家,只是提琴手。

<script type="text/javascript">
//added “str” as a function input/parameter
function change_url(str) {
    /* removed this
    var str = ''; */
    /* changed this
    str = 
    to this */
    return str.replace(/blog\.domain\.info/g, 'blogtest\.domain\.info');
}
//and called it like this
document.onload = function(){
    document.getElementsByTagName('head')[0].outerHTML = change_url(document.getElementsByTagName('head')[0].outerHTML);
}
</script>

如果您要更改整个文档中的所有引用,则只需像这样称呼它即可。

document.onload = function(){
    document.getElementsByTagName('head')[0].outerHTML = change_url(document.getElementsByTagName('head')[0].outerHTML);
    document.getElementsByTagName('body')[0].outerHTML = change_url(document.getElementsByTagName('body')[0].outerHTML);
}

这将更改对src,href,img和!! TEXT !!中找到的任何实例中blog.domain.info的所有引用。 因此请小心使用它,因为所有前述参考都将被更改。 ; o)

答案 3 :(得分:0)

嗯,这是非常困难的,因为如何在遇到标题之前更改标题中的项目?如果你可以强迫你的JS在加载之前运行,也许,但我怀疑它。您可以进行后加载,查找条目,重写它们并异步加载它们,但代码可能会错过初始化事件。它会变得复杂。

可以使用其他答案中提到的getElementsByTagName()方法来解决元素问题。这适用于src/href更改,但不会处理CSS图像,尤其是background-image,这可能会出现在很多元素上。然后就是这类事情附加在课堂上的问题,这将需要搜索课程条目,这是一个痛苦。我怀疑改变像RSS feed,favicons等元信息会在后载时生效。

最好真正处理服务器端。