【问题标题】:jQuery code not working with wordpress sitejQuery 代码不适用于 wordpress 网站
【发布时间】:2018-10-25 12:03:37
【问题描述】:

所以我在一个网站上工作,一个带有 _s 样板的自定义 wp 主题,我已经将我的样式和脚本排入队列,浏览器可以很好地接收它们;

wp_enqueue_style( 'bootstrap-css', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' );

    wp_enqueue_script( 'bootstrap-js', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js', array(jquery), true);

    wp_enqueue_style( 'cbd-yums-style', get_stylesheet_uri() );

    wp_enqueue_script( 'cbd-yums-scripts', get_template_directory_uri(). '/js/scripts.js', array(), true ); 

scripts.js 是我的 jquery 代码所在的位置,我正在尝试更改我的主要导航项目的文本颜色,我尝试了这个代码,相信它会起作用:

( function( $ ) {

    $('.primary-menu .menu-item').css('background-color', '#AED038');

} ) ( jQuery );

&对应的HTML

<nav id="site-navigation" class="main-navigation col-md-6 col-lg-6">
  <button class="menu-toggle" aria-controls="primary-menu" aria-expanded="false">Primary Menu</button>
  <div class="menu-header-menu-container">
    <ul id="primary-menu" class="menu nav-menu" aria-expanded="false">
      <li id="menu-item-44" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-44"><a href="#home">Home</a></li>
      <li id="menu-item-45" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-45"><a href="#about">About</a></li>
      <li id="menu-item-46" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-46"><a href="#products">CBD Products</a></li>
    </ul>
  </div>        
</nav>

但是浏览器重新加载没有任何变化,所以我回到 w3schools 检查我的语法。我修改了 jquery css() 示例;

有人能看出我做错了吗?

【问题讨论】:

  • 为什么不将 jQuery 添加到依赖项中? ` wp_enqueue_script( 'cbd-yums-scripts', get_template_directory_uri(). '/js/scripts.js', array('jquery'), true );` 为什么 jquery 不是这个字符串 --> @987654329 @ ?
  • 不起作用,我试过了: $('.primary-menu .menu-item').css('cssText', 'background-color: #AED038 !important;'); ,我在这里找到了cssText的使用stackoverflow.com/questions/1986182/…
  • @SumeshTG 无需使用 !important - 内联 css 具有最高的特异性权重,因此使用 !important 是多余的。
  • primary-menu 是 id 而不是类,像 #primary-menu 一样使用,不像 .primary-menu 那样使用

标签: javascript jquery wordpress


【解决方案1】:

你必须在jquery中选择带有#前缀的id,在当前情况下调用带有.前缀的id表示类名,jquery正在搜索类名primary-menu,因为你没有任何带有类名的元素primary-menu,样式被忽略。

这个问题可以通过改变查询来解决 $('#primary-menu .menu-item').css('background-color', '#AED038');

【讨论】:

  • 感谢您指出这一点,我什至戴上了眼镜哈哈,但它仍然不起作用,$('#primary-menu .menu-item').css('背景色', '#AED038');我说得对吗,理论上这应该 1. 查找 ID 为“primary-menu”的元素 2. 查找类为“menu-item”的子元素 3. 将元素背景颜色更改为 #aed038。
【解决方案2】:

我发现了问题!! 1. 我没有正确加载 jQuery 作为依赖项 2. 我没有确定 jQuery 是在非冲突模式下编写的

所以我简单地把它改成了

 jQuery(document).ready(function($){
    $('#primary-menu .menu-item').css('background-color', '#AED038');
});

在我必须将脚本和样式排入队列的 functions.php 中

wp_enqueue_script( 'cbd-yums-scripts', get_template_directory_uri(). '/js/scripts.js', array( 'jquery' ), '20181025' ,true ); 

谢谢大家帮我缩小问题的范围

【讨论】:

    【解决方案3】:

    在文档“准备就绪”之前,无法安全地操作页面。 - http://learn.jquery.com/using-jquery-core/document-ready/

    像这样修改你的代码:

    (function($) {
    
        $(document).ready(function() {
    
            $('#primary-menu .menu-item').css('background-color', '#AED038');
    
        });
    
    })(jQuery);
    

    现在代码将在文档准备好后执行。

    正如 Hafeez Hamza 指出的那样:将 .primary-menu 更改为 #primary-menu

    【讨论】:

    • 什么? $(document).ready(function() { 的简写是 $(function() {。你能澄清一下吗?
    • 从第一个引用(function($){ 的anwser 开始:您问题中的代码与.ready() 无关。相反,它是一个以 jQuery 对象作为参数的立即调用函数表达式 (IIFE)。
    • 按票数排序 - 即便如此,问题也不在于他们如何声明 $(document)
    • 哦,是的,这可能是问题所在,wordpress 将脚本标签放在了头部。看到这个 JSfiddle 证明我的观点:jsfiddle.net/jrducf6v/3 如果你能反驳我会删除我的答案。
    • 你有一个有缺陷的测试 - jQuery/JavaScript 是同步的 - 它会采用最后给定的值.. 示例 1:jsfiddle.net/hjxv26de 有效,示例 2:jsfiddle.net/8ekwbpur 有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2013-11-27
    • 2021-05-08
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多