jquery
2011-05-01 125 views 2 likes 
2

我想改变的网址我从谷歌搜索回来,因为有时谷歌喜欢打电话回家关于我的浏览habbits(叹息曾经是雅虎的邪恶)。 :S我得到什么似乎是有效的jQuery的错误,想知道什么是修复程序?更改href许多链接与jquery

错误代码是(神秘的,因为我在Chrome V8是): TypeError: Cannot call method 'split' of undefined

这里的源:

$("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); 
}); 

我已验证我得到的错误是在第一次分裂,而不是部分参数。

+0

'在你要求每个'在该字符串了''元素功能(一)'(本)''没有$(a)使用'$试过吗? – Cipi 2011-05-01 16:48:34

+0

您不应该对除jQuery对象之外的其他任何东西使用'.each()'方法。而由split()返回的数组不是这样的对象。使用'$ .each($(a).attr('href')。split('&'),function(i,part){...});'改为。 – ThiefMaster 2011-05-01 16:52:15

+0

@ThiefMaster - 是不得不使用'... splits.length'来迭代:P也忘了 – 2011-05-01 17:05:40

回答

1

您使用的回调函数的第一个参数实际上是用于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); 
}); 
+0

是的,它:)谢谢 – 2011-05-01 17:01:07

1

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

相反的each,你应该通过回调attr

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

如果我有代表,我会给你投票:D是索引,我在里面一个对象方法,所以我可以使用** this **而不用任何参数设置。 – 2011-05-01 17:04:41

相关问题