如何让jQuery脚本在页面上运行?

时间:2014-06-26 作者:JakeP

我很难想出如何让jQuery脚本以“正确”的方式在我的Wordpress页面上运行。

我跟踪了this 并执行第一个答案所说的操作。

关于如何让jQuery在您的博客上工作,我读了很多教程和文章,但我似乎无法理解。

我有很多问题,我希望能从其他有经验的人那里得到解决。

首先,我读过的大部分教程和内容都是如何获取jQueryincluded 在你的博客上。我的第一个问题是,您下载的大多数主题不应该自动在标题中包含jQuery吗?例如,我的网站在每页中都会自动包含以下行:

<script type=\'text/javascript\' src=\'http://<mysite>.com/wp-includes/js/jquery/jquery.js?ver=1.11.0\'></script>
<script type=\'text/javascript\' src=\'http://<mysite>.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1\'></script>
所以,jQuery也包括在内,我不需要担心。。。

好的,已经包括在内了,现在我需要弄清楚如何只获取一个示例页面或帖子来运行jQuery脚本。

我按照上面列出的页面上的说明。。。

我首先进入我网站的后端,进入我的子主题文件夹,并创建一个名为“jquery script.js”的新文件。

在其中,我编写以下代码并保存文件:

jQuery(document).ready(function($){
  $("button").click(function(){
    $("#div1").fadeIn();
    $("#div2").fadeIn("slow");
    $("#div3").fadeIn(3000);
  });
});
好吧。。。我的jQuery脚本文件位于后端。现在,我需要引用或排队该脚本。根据文章,最好将脚本排队。因此,我按照说明在子主题的“functions.PHP”文件中添加了一个新的PHP函数。在此文件中,我添加了以下内容:

function add_jquery_script() {
  wp_enqueue_script(
    \'jquery-script\', // name your script so that you can attach other scripts and de-register, etc.
     get_template_directory_uri() . \'/jquery-script.js\', // this is the location of your script file
     array(\'jquery\') // this array lists the scripts upon which your script depends
  );
}
好了,结束了。我相信这应该行得通。因此,我在我的网站上创建了一个“测试页面”(未发布或其他任何内容)。我创建div、button和所有我需要的东西,以使我的脚本执行我希望它执行的操作:

<p>Demonstrate fadeIn() with different parameters.</p>
<button>Click to fade in boxes</button>
<br><br>
<div id="div1" style="width:80px;height:80px;display:none;background-color:red;"></div><br>
<div id="div2" style="width:80px;height:80px;display:none;background-color:green;"></div><br>
<div id="div3" style="width:80px;height:80px;display:none;background-color:blue;"></div>
我预览页面,单击按钮。。。。没有什么什么都没发生。

可以也许我需要在我的功能上多做一些。php文件。所以我回到那里,在我关注的页面上读到,也许你必须添加一行代码才能使其正常工作。因此,我在函数后添加以下行:

add_action(\'wp_enqueue_scripts\', \'add_jquery_script\');
我保存文件。我很兴奋。这应该行得通。我去测试我的页面。。。再也没有了。当我点击按钮时,什么都没有发生。嗯。。。

所以现在,我去做一些完全不同的功能。php文件。我过去做过一些事情来让某些脚本工作。。。因此,我完全删除了该函数和“add\\u action”调用,并在我的函数中实现了以下内容。php文件:

function add_jquery_script() {
    echo \'<script type="text/javascript" src="http://<mysite>.com/wp-content/themes/responsive-childtheme-master/jquery-script.js"></script>\' . "\\n";
}
add_action(\'wp_head\', \'add_jquery_script\');
然后保存文件并进行测试。我的页面工作!!!呜呜!它做了我想让它做的事。

然而,我对此并不满意。我到处都读到,您应该始终使用我尝试使用但失败的方法将脚本排队。

因此,我希望回答几个最后的问题:

首先,为什么当我尝试将脚本排队时它不起作用,但在执行第二种方法时却起作用了?

其次,现在的情况是。。。我写的jQuery脚本包含在我网站的每个页面上。。。每一篇文章、每一页等等,这是一个问题吗??有没有办法将它包含在我希望脚本运行的一个页面上,这样它就不会影响其他页面?

第三,为什么我不能在我的TinyMCE编辑器的“文本”选项卡中包含这个脚本,我在写页面/帖子时使用这个选项卡?我试过使用<script> 标记并将我的小脚本放在它们之间,但这似乎不起作用$("button"), 那么,我会给特定页面上的按钮一些唯一的ID,比如<button id="some-unique-id"> 然后通过jQuery将其作为目标?这样,脚本将只适用于该按钮很抱歉发了这么长的帖子,还有一些noob问题。。。我只是从来没有对jQuery做过那么多的麻烦,我正在努力总结如何使用Wordpress,以便包含我自己的自定义脚本和我想要运行的东西。

如果有人对我的任何问题有任何反馈,我们将不胜感激。非常感谢!

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

你的问题有点宽泛。实际上,我们每个帖子都有一个问题。不过我要试着回答

我的第一个问题是,您下载的大多数主题不应该自动在标题中包含jQuery吗?

嗯,基本正确。如今,一个主题中的许多功能都需要jquery才能正常运行。我还没有遇到一个不使用jquery的主题。这里需要注意的是,如果您的主题没有加载jquery,请加载wordpress默认附带的jquery,它已经内置,因此您只需将库排队即可。不建议从外部源加载jquery库

(值得注意的是,你的主题应该wp_head() 在页眉和wp_footer() 在页脚中,供脚本和样式使用,如wp_enqueue_scripts 使用这些挂钩将脚本和样式挂钩到)

只需将jquery添加到主题中

function my_scripts_method() {
    wp_enqueue_script( \'jquery\' );
}

add_action( \'wp_enqueue_scripts\', \'my_scripts_method\' ); 
我预览页面,单击按钮。。。。没有什么什么都没发生。

首先,当我尝试将脚本排队时,为什么它不起作用,但在执行第二种方法时却起作用了?

大多数在线教程中都有一个基本缺陷。新手可能不知道这一点,但$scr 中的参数(脚本的URL)wp_enqueue_script(), wp_register_script(), wp_enqueue_style()wp_register_style() 对于子主题,父主题和插件是不同的

父主题使用get_template_directory_uri()get_stylesheet_directory_uri()plugins_url()这就是代码不起作用的原因,您正在子主题中使用父路径。你不应该使用第二种方法。第一种方法是加载脚本和样式的正确方法

其次,现在的情况是。。。我写的jQuery脚本包含在我网站的每个页面上。。。每一篇文章、每一页等等,这是一个问题吗??有没有办法将它包含在我希望脚本运行的一个页面上,这样它就不会影响其他页面?

样式和脚本可以通过使用有条件地加载conditional tags. 您可以在自己的时间内查看这些内容,但基本上,如果您只需要在主页上而不需要在其他页面上加载jquery,您可以这样做

function my_scripts_method() {
   if(is_home()){
        wp_enqueue_script( \'jquery\' );
    }
}    
add_action( \'wp_enqueue_scripts\', \'my_scripts_method\' ); 
第三,为什么我不能在我的TinyMCE编辑器的“文本”选项卡中包含这个脚本,我在写页面/帖子时使用这个选项卡?我试着使用标签,只是把我的小脚本放在它们之间,但这似乎不起作用。

您应该始终使用wp_enqueue_scripts 动作挂钩,样式和脚本应该根据需要有条件地加载。

第四,如果我不能让我的脚本只运行一个页面,并且它必须包含在每个页面中,那么我显然必须更好地专门针对HTML元素。显然,我不会使用通过使用$(“button”)以每个按钮为目标的脚本,那么我会给特定页面上的按钮一些唯一的ID,比如,然后通过jQuery以它为目标吗?这样,脚本将只适用于该按钮。

有关说明,请参见第二点

结束