使用 jquery 更改许多 a 链接中的 href

发布于 2024-11-05 02:08:40 字数 628 浏览 0 评论 0原文

我正在尝试更改从谷歌搜索返回的网址,因为有时谷歌喜欢打电话回家了解我的浏览习惯(叹息这曾经是雅虎的邪恶)。 :SI 从看似有效的 jquery 中收到错误,想知道修复方法是什么?

错误代码是(很神秘,因为我使用的是 chrome v8): TypeError:无法调用未定义的“split”方法

这是来源:

$("a[href^='http://www.google.com/url'], a[href^='www.google.com/url'], a[href^='/url?'], a[href^='url?']").each(
function(a) { 
    var url = "";
    $(a).attr("href").split("&").each(function (part) {
        if (part.match(/^url\=/)) {
            url = unescape( (part.split("=",2))[1] );
        }
    });
    $(a).attr("href", url);
});

我已经验证我收到的错误是在第一个分割上,而不是在部分上范围。

I'm trying to change urls I get back from google search, because sometimes google likes to phone home about my browsing habbits (sigh that used to be yahoo's evil). :S I am getting an error from what seems to be valid jquery, was wondering what the fix is?

The error code is (cryptic, because I'm in chrome v8):
TypeError: Cannot call method 'split' of undefined

Here's the source:

$("a[href^='http://www.google.com/url'], a[href^='www.google.com/url'], a[href^='/url?'], a[href^='url?']").each(
function(a) { 
    var url = "";
    $(a).attr("href").split("&").each(function (part) {
        if (part.match(/^url\=/)) {
            url = unescape( (part.split("=",2))[1] );
        }
    });
    $(a).attr("href", url);
});

I've verified that the error I am getting is on the first split, not the one on the part parameter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丶视觉 2024-11-12 02:08:40

您使用的回调函数的第一个参数实际上是用于 each() 的数组的索引。试试这个:

$("a[href^='http://www.google.com/url'], a[href^='www.google.com/url'], a[href^='/url?'], a[href^='url?']").each(
function() { 
    var url = "";
    $(this).attr("href").split("&").each(function (part) {
        if (part.match(/^url\=/)) {
            url = unescape( (part.split("=",2))[1] );
        }
    });
    $(this).attr("href", url);
});

The first argument of the callback function you're using is actually the index of the array used for the each(). Try this instead:

$("a[href^='http://www.google.com/url'], a[href^='www.google.com/url'], a[href^='/url?'], a[href^='url?']").each(
function() { 
    var url = "";
    $(this).attr("href").split("&").each(function (part) {
        if (part.match(/^url\=/)) {
            url = unescape( (part.split("=",2))[1] );
        }
    });
    $(this).attr("href", url);
});
注定孤独终老 2024-11-12 02:08:40

each 回调的第一个参数(您的 a)是一个索引,而不是元素。

您应该将回调传递给 attr,而不是 each

$("a[...]").attr("href", function(index, oldValue) {
    return something;
});

The first parameter to the each callback (your a) is an index, not the element.

Instead of each, you should pass a callback to attr:

$("a[...]").attr("href", function(index, oldValue) {
    return something;
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文