当DOM准备好时,jQuery代码不会执行

时间:2010-06-13 17:56:52

标签: javascript jquery wordpress dom

我编写了一个简单的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);

非常感谢你的帮助!

3 个答案:

答案 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");
    });
});

http://api.jquery.com/ready/

答案 2 :(得分:0)

内线应为:

jQuery.noConflict();
jQuery(document).ready(function($) {
    $("a[href$='respond']").each(function() { 
        $(this).attr("href", $(this).attr('href').replace("respond", "comments"));
    });
});

浏览器不喜欢直接在this.href;

上投射替换

编辑:或者可能只是我的浏览器有一个嘶嘶声。