Javascript 如何将jquery与my Node.js EJS模板一起使用?
情况: 我试图实现这个问题的第一个答案(25票赞成):使用Node.js ejs模板 所以我写了这段代码Javascript 如何将jquery与my Node.js EJS模板一起使用?,javascript,jquery,css,node.js,Javascript,Jquery,Css,Node.js,情况: 我试图实现这个问题的第一个答案(25票赞成):使用Node.js ejs模板 所以我写了这段代码 我的代码: Main.js <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> $('.UpvoteButton').click(function () { $(this).toggleClass('on'); }); $('.Dow
我的代码: Main.js
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
$('.UpvoteButton').click(function () {
$(this).toggleClass('on');
});
$('.DownvoteButton').click(function () {
$(this).toggleClass('on');
});
index.ejs
<% include ../partials/header %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class ="containerMarginsIndex">
<% for(var i=0; i < fun.length; i++) {%>
<div class="fun">
<h3 class="text-left"><%= fun[i].title %></h3>
<a href="details/<%= fun[i].id %>">
<img class = "postImg" src="/images/uploads/<%= fun[i].image %>">
</a>
<span class="UpvoteButton"> </span><span class="DownvoteButton"> </span>
</div>
<% } %>
</div>
<% include ../partials/footer %>
问题: 当我点击时什么也没发生。图像保持不变
问题:
我做错了什么?浏览器本机不支持require命令。为了在主js文件中包含“jquery.js”文件,您必须使用webpack或browserify等文件绑定器。您必须在EJS模板中包含jquery和客户端脚本,以便在浏览器中呈现 在节点中使用npm安装jQuery,并在服务器端执行
var$=require('jQuery')
,只允许您在服务器上使用jQuery的一些方法,而不包括客户端的jQuery
将模板更改为
<% include ../partials/header %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class ="containerMarginsIndex">
<% for(var i=0; i < fun.length; i++) {%>
<div class="fun">
<h3 class="text-left"><%= fun[i].title %></h3>
<a href="details/<%= fun[i].id %>">
<img class = "postImg" src="/images/uploads/<%= fun[i].image %>">
</a>
<span class="UpvoteButton"> </span><span class="DownvoteButton"> </span>
</div>
<% } %>
</div>
<script>
$('.UpvoteButton').click(function () {
$(this).toggleClass('on');
$('.DownvoteButton').removeClass('on');
});
$('.DownvoteButton').click(function () {
$(this).toggleClass('on');
$('.UpvoteButton').removeClass('on');
});
</script>
<% include ../partials/footer %>
$('.UpvoteButton')。单击(函数(){
$(this.toggleClass('on');
$('.DownvoteButton').removeClass('on');
});
$('.DownvoteButton')。单击(函数(){
$(this.toggleClass('on');
$('.UpvoteButton').removeClass('on');
});
我在使用ejs作为“视图引擎”模板的NodeJS中遇到了类似的问题,并将其解决为以下问题:
服务器端:
npm install jquery --save
npm install jsdom --save
var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = require("jquery")(window);
任何应用程序
<script>
$('.UpvoteButton').click(function () {
$(this).toggleClass('on');
$('.DownvoteButton').removeClass('on');
});
$('.DownvoteButton').click(function () {
$(this).toggleClass('on');
$('.UpvoteButton').removeClass('on');
});
</script>
$('.UpvoteButton')。单击(函数(){
$(this.toggleClass('on');
$('.DownvoteButton').removeClass('on');
});
$('.DownvoteButton')。单击(函数(){
$(this.toggleClass('on');
$('.UpvoteButton').removeClass('on');
});
请原谅我的英语。
我知道这篇文章很旧,但我也有同样的问题,我找到了解决办法。
可以使用外部JQuery文件。
必须将其置于“公用”文件夹中。
使用此树:
application.js
[视图]
index.ejs
[公共]
[包括]
jquery.min.js
fontions_jquery.js
使用“index.js”中的代码:
它对我很有用。“with Node.js”-比到底意味着什么?例如,您正在使用Express?您可以将源代码粘贴到浏览器生成并“看到”的源代码中吗?jQuery可通过NPM用于Node.js,但通常不需要在服务器上(或在客户端上)。Web服务器上没有文档,也没有任何可点击的内容,客户端通常没有
require
,除非您使用的是Browserify或Webpack。换句话说,您很可能做错了。@adeneo我正在使用ejs呈现我的页面(正如index.ejs所建议的)。在我的index.js中,我有两个跨距,其中包含可单击的图像。如前所述,我试图复制链接答案中的行为。如果我做错了,请告诉我为什么以及如何补救:)谢谢@marcinrek这意味着我专门使用npm模块来呈现我的页面(我使用的是ejs)。只是想在我的一个ejs文件中的2个跨距中添加一些可单击的功能。Express是我正在使用的模块之一,是的。不是我想要做的,但是谢谢!我会记住这一点。我希望这个版本适合你。否则,您可以回滚到您的版本;)但是,仍然不可能从EJS文件中的外部文件使用JQUERY?我编写了一些JQUERY,当我将它写到.ejs文件中时,它工作得非常好,但是一旦我将代码移到.js文件中,它就不工作了。我还添加了脚本。在.js文件中,我用:$(document.on('ready',function(){……})调用它;但它没有反应。当我在客户端调用它时。有小费吗?非常感谢。
<head>
<title>Whatever App</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<script>
$('.UpvoteButton').click(function () {
$(this).toggleClass('on');
$('.DownvoteButton').removeClass('on');
});
$('.DownvoteButton').click(function () {
$(this).toggleClass('on');
$('.UpvoteButton').removeClass('on');
});
</script>
<script src="/include/jquery.min.js"></script>
<script src="/include/fonctions_jquery.js"></script>
var express = require('express');
var path = require('path');
var appli = express();
appli.use(express.static(__dirname +path.sep+ 'public'));