【问题标题】:jQuery code not executing when DOM is readyDOM 准备好时 jQuery 代码不执行
【发布时间】:2010-06-13 17:56:52
【问题描述】:

我编写了一个简单的 jQuery 脚本来更改链接的哈希标记。我这样做是因为我在 Wordpress 中使用 IntenseDebate cmets,但评论链接仍然链接替换旧 cmets 的 id。我正在使用 jQuery,因此如果启用了 javascript,用户可以单击 cmets 链接,它会将他们带到 IntenseDebate cmets。如果未启用,它将带他们到传统的 cmets(因为 IntenseDebate 需要 javascript 才能运行)。

我遇到的问题在于此脚本更改链接末尾的哈希标记。当前 URL “someurl.com/#respond”,但我需要脚本将其更改为“someurl.com/#cmets”。发生的事情是脚本不起作用,但是我相信我的语法是正确的,所以我决定尝试将代码复制并粘贴到 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);

非常感谢您的帮助!

【问题讨论】:

    标签: javascript jquery wordpress dom


    【解决方案1】:

    您正在调用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() 的结果作为$ 参数传递给该函数。

    【讨论】:

    • 啊,谢谢,这段代码不会产生 Firebug 抱怨的那种类型错误。但是,它不像我的那样执行。当页面加载时没有任何变化,但如果我将它粘贴到控制台并运行它,它会完美运行。
    【解决方案2】:

    调用 .ready() 时不需要传递参数。 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/

    【讨论】:

      【解决方案3】:

      内线应该是:

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

      浏览器不喜欢直接在 this.href 上强制转换;

      编辑:或者可能只是我的浏览器发出了嘶嘶声。

      【讨论】: