使用JavaScript到达Jekyll变量并通过它操作DOM操作

hzo*_*tan 5 javascript dom-manipulation jekyll

我极有可能有错误逻辑,但我只是学习JavaScript和Jekyll.

我的目标是通过JavaScript操作HTML元素,并将一些Jekyll变量放在该元素的内部HTML中.一切都是从本地开发目录加载的jekyll serve.我尝试了以下方法:

HTML:

<html>
<body>
<h2>Something</h2>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

document.addEventListener("DOMContentLoaded", function () {
    manipulate = document.getElementsByTagName("h2");
    manipulate[0].innerHTML = "{{ page.title }}";
});
Run Code Online (Sandbox Code Playgroud)

结构体:

??? _config.yml
??? contact-us.md
??? css
?   ??? main.scss
??? feed.xml
??? _includes
?   ??? footer.html
?   ??? header.html
?   ??? head.html
?   ??? readtime.html
?   ??? sidebar.html
??? index.html
??? js
?   ??? anchor.js
?   ??? tags.js
??? _layouts
?   ??? default.html
?   ??? page.html
?   ??? post.html
?   ??? single.html
?   ??? tags.html
??? _posts
??? readme.md
??? _sass
?   ??? _base.scss
?   ??? _layout.scss
?   ??? _syntax-highlighting.scss
??? _site
?   ??? [...]
??? tags.md
Run Code Online (Sandbox Code Playgroud)

我到达tags.jstags.md

例如,如果我的页面标题是"foo",那么我在<h2>标记中假设了以下HTML输出(这是我的目标):

<h2>foo</h2>
Run Code Online (Sandbox Code Playgroud)

相反,它给了我以下内容:

<h2>{{ page.title }}</h2>
Run Code Online (Sandbox Code Playgroud)

我认为这是因为jekyll在jinja格式中呈现变量的值并给出输出,然后我将字符串"{{ page.title }}"放到<h2>标记中.

我确定我错过了一些东西,但如果你在你的某个项目中使用了类似的东西,我会感激任何帮助.

Kev*_*man 7

Jekyll只接触有前沿的文件.如果文件不包含frontmatter,则只需将其复制到站点目录结构中.您的tags.js文件可能不包含任何前端问题,这就是液体标签未被替换的原因.

要让Jekyll替换JavaScript文件中的液体标签,只需在其顶部添加一个frontmatter部分即可.那个前线可能是空的!

---
---
//rest of your JavaScript
Run Code Online (Sandbox Code Playgroud)

这将解决Jekyll不替换标签的问题,但是你会遇到另一个问题:当Jekyll在JavaScript中替换标签时,它不会提前知道哪个页面将调用该JavaScript.所以它不知道page.title会是什么!(实际上,它将使用您的JavaScript文件的标题,这可能取决于您的默认设置.)

解决这个问题的一种方法是从JavaScript中删除液体,而只是取一个参数.然后从您的html文件中将该参数传递给JavaScript.该参数可以是液体标签.