【发布时间】:2021-10-09 23:27:34
【问题描述】:
我正在开发一个 Nuxt.js 项目。在这个项目中,我想为恰好在正文中的任何锚标记设置一个事件侦听器,然后再做一些事情。
问题是我想要监听的锚标记位于 CMS 中设置的内容中,因此我无法像往常一样在 Vue.js 中绑定 onClick 事件。我想操纵 DOM 将 onClick 事件绑定到正文中的锚标记。
在 jQuery 方面:
window.onload = function () {
if (typeof jQuery != 'undefined') {
jQuery(document).ready(function ($) {
jQuery('body').on('click', 'a', function (event) {
// all my other code that does what I want
});
});
}
};
我正在尝试在 Nuxt.js 中设置 jQuery,我尝试将其安装为插件(yarn add jquery,然后将其添加到我的 nuxt.config.js),我尝试将 CDN 引用添加到头部.将它作为插件安装似乎没有做任何事情。如果我在页面加载后在控制台中输入$().jquery,它会返回我脑海中的 jQuery 版本。
但是,如果我尝试将 jQuery 添加到页面上的 mounted() 挂钩,它会返回“未定义 jQuery”
一个示例,它会导致相同的“未定义 jQuery”错误:
mounted() {
this.$nextTick(() => {
// another method that's unrelated; this is not blank in my actual code
});
this.jQueryTest();
}
methods : {
jQueryTest() {
jQuery('body').on('click', 'a', function (event) {
console.info('hi');
});
}
此外,我知道将 Vue.js 与 jQuery 混合使用通常是不好的做法。如果有 Nuxt-y/Vue-y 的方式来设置这个事件监听器(一个 onclick 事件,用于恰好在 body 中的任何锚标记),那么我听到它就会松一口气。
--
更新:请参阅下面的项目设置示例。我修改了类等细节。
<div
class="Card__extras"
>
<p
v-show="sectionOpen"
ref="section"
class="Card__extras-section"
:tabindex="isActive ? 1 : -1"
v-html="sectionText"
/>
</div>
sectionText 是从 CMS 中提取的字符串,类似于:
To read more about this story — and other subjects – check out <a target="_blank" href="https://google.com">This Website</a>
【问题讨论】:
-
你能用一些实际部分文本的例子来编辑吗?
-
@kissu 完成!我添加了一个我正在使用的字符串的示例。
-
该死,那是什么CMS?无头CMS?您应该能够将它与一些加载器或一些您可以单独获取的字段一起提供。在这里,你会陷入混乱的
querySelectors... -
@kissu 内容丰富,是的,一个无头 CMS。我不确定您将它与一些装载机一起运送是什么意思。我同意走 querySelector 路线很麻烦,而且它可能也不是一个可以大规模工作的解决方案......