前提是
我有一个静态站点,我正在将其转换为gatsby 站点。我已经使用 jQuery 来执行某些 DOM 操作和其他触发器,例如切换移动菜单和处理 cookie。我想包含这个文件,main.js这样它里面的 JavaScript 就会在所有页面上执行。
我已经使用 npm 安装了 jQuery 并将其包含在layout.jsusing
import $ from "jquery"
我无法以可靠的方式实现上述目标。以下是我尝试过但没有成功的方法。
方法 1
将整个代码放在onInitialClientRenderingatsby-browser.js
方法2
复制html.js到src文件夹中,通过script标签添加文件。
方法3
其次这个答案并放置整个代码中
<script dangerouslySetInnerHTML= {{ __html: `putYourSciptHereInBackticks `}} />
Run Code Online (Sandbox Code Playgroud)
方法4
跟着这个答案,并试图使用包含的文件react-helmet。代码确实使用此方法执行,但仅在加载站点时执行。如果我遍历到其他页面,则不会,即使我回到同一页面也是如此。
现在,我已经得到它通过保持方法4和复制整个工作的代码main.js在gatsby-browser.js下面onRouteUpdate就像这样:
const $ = require("jquery");
exports.onRouteUpdate = () => {
$(document).ready(function(){
// Code
});
}
Run Code Online (Sandbox Code Playgroud)
但是,我知道这是多余的,绝对不是正确的做事方式。
好的,我有这个代码:
<li>
<a href="#step-2" class="step-3-link selected">
<span class="stepNumber">2</span>
</a>
<br />
<br />
<span class="sn2">Home Page Banner</span>
</li>
Run Code Online (Sandbox Code Playgroud)
我需要做的是,如果'li a'选择了类,在这种情况下是step-3-link,那么类'sn2'的范围应该添加一个类'selected-span'.
我之前尝试过的代码如下:
$('.swMain ul.anchor li a.selected').siblings('span').addClass('selected-span');
Run Code Online (Sandbox Code Playgroud)
我尝试过.siblings,.find,.parent等等但没有成功.请指导我一样.