我编写了一个简单的jQuery脚本来更改链接的哈希标记。我这样做是因为我在Wordpress中使用了评论,但评论链接仍然链接了旧评论的ID。我正在使用jQuery,因此如果启用了javascript,用户可以点击评论链接,它会将他们带到评论。如果它没有启用,它将把它们带到传统的评论(因为我们需要javascript来运行)。
我在这个脚本中遇到的问题是更改链接末尾的哈希标记。目前网址为“someurl.com/ #respond ”,但我需要将脚本更改为“someurl.com/ #comments ”。发生的事情是脚本不起作用,但是我相信我的语法是正确的,所以我决定尝试将代码复制并粘贴到Firebug的控制台中并完美地执行代码。我可以看到我试图改变的链接现在是正确的,我可以点击它,它按照我的意愿工作。所以我不明白为什么代码在应该执行时没有执行。我正在使用$(document).ready(),我在页面上有其他jQuery执行得很好。我甚至在一个简单的HTML页面上测试它,远离可能由Wordpress引起的所有问题,我收到了相同的结果。有谁知道为什么会发生这种情况?
这是我的代码(我使用noConflict,因为Wordpress使用其他框架):
jQuery.noConflict();
jQuery(document).ready(function($) {
$("a[href$='respond']").each(function() {
this.href = this.href.replace("respond", "comments");
});
})(jQuery);
非常感谢你的帮助!
答案 0 :(得分:3)
你正在调用jQuery(document).ready()
的结果会给你一个类型错误,你正在寻找这种模式:
(function ($) {
// inside this function, you can use `$`
$(document).ready(function() {
$("a[href$='respond']").each(function() {
this.href = this.href.replace("respond", "comments");
});
});
})(jQuery.noConflict());
在上面的代码中,您声明了一个立即调用的匿名函数,将jQuery.noConflict()
的结果作为$
参数传递给该函数。
答案 1 :(得分:1)
调用.ready()时不需要传递参数。当jQuery调用你的函数时,jQuery将jQuery对象作为初始参数传递。
jQuery.noConflict();
jQuery(document).ready(function($) {
$("a[href$='respond']").each(function() {
this.href = this.href.replace("respond", "comments");
});
});
答案 2 :(得分:0)
内线应为:
jQuery.noConflict();
jQuery(document).ready(function($) {
$("a[href$='respond']").each(function() {
$(this).attr("href", $(this).attr('href').replace("respond", "comments"));
});
});
浏览器不喜欢直接在this.href;
上投射替换编辑:或者可能只是我的浏览器有一个嘶嘶声。