Kan ik jQuery gebruiken met Node.js?

Is het mogelijk om jQuery-selectors/DOM-manipulatie aan de serverzijde te gebruiken met Node.js?


Antwoord 1, autoriteit 100%

Update (27-jun-18): het lijkt erop dat er een grote update is geweest voor jsdomwaardoor het oorspronkelijke antwoord niet meer werkt. Ik heb ditantwoord gevonden waarin wordt uitgelegd hoe u nu jsdomkunt gebruiken. Ik heb de relevante code hieronder gekopieerd.

var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);

Opmerking:Het oorspronkelijke antwoord vermeldt niet dat u ook jsdom moet installeren met npm install jsdom

Update (eind 2013): het officiële jQuery-team nam uiteindelijk het beheer van het jQuery-pakket op npm:

npm install jquery


Dan:

require("jsdom").env("", function (err, window) {
    if (err) {
        console.error(err);
        return;
    }
    var $ = require("jquery")(window);
});


Antwoord 2, autoriteit 10%

Ja dat kan, met behulp van een bibliotheek die ik heb gemaakt met de naam nodeQuery

var Express = require('express')
    , dnode = require('dnode')
    , nQuery = require('nodeQuery')
    , express = Express.createServer();
var app = function ($) {
    $.on('ready', function () {
        // do some stuff to the dom in real-time
        $('body').append('Hello World');
        $('body').append('<input type="text" />');
        $('input').live('click', function () {
            console.log('input clicked');
            // ...
        });
    });
};
nQuery
    .use(app);
express
    .use(nQuery.middleware)
    .use(Express.static(__dirname + '/public'))
    .listen(3000);
dnode(nQuery.middleware).listen(express);

Antwoord 3, autoriteit 10%

Op het moment van schrijven is er ook de onderhouden Cheerio.

Snelle, flexibele en slanke implementatie van core jQuery ontworpen
specifiek voor de server.


4, Autoriteit 4%

In 2016 zijn dingen veel eenvoudiger. Installeer jQuery to node.js met je console:

npm install jquery

Bind het aan de variabele $(bijvoorbeeld – ik ben eraan gewend) in uw Node.js-code:

var $ = require("jquery");

Doe spullen:

$.ajax({
    url: 'gimme_json.php',
    dataType: 'json',
    method: 'GET',
    data: { "now" : true }
});

Werkt ook voor Slugp omdat het gebaseerd is op knooppunt.


5, Autoriteit 3%

Ik geloof dat het antwoord hierop nu ja is.
https://github.com/tmpvar/jsdom

var navigator = { userAgent: "node-js" };  
var jQuery = require("./node-jquery").jQueryInit(window, navigator);

6, Autoriteit 3%

npm install jquery --save#Note alle kleine letters

npm install jsdom --save

const jsdom = require("jsdom");
const dom = new jsdom.JSDOM(`<!DOCTYPE html>`);
var $ = require("jquery")(dom.window);
$.getJSON('https://api.github.com/users/nhambayi',function(data) {
  console.log(data);
});

7, Autoriteit 2%

JQuery-module kan worden geïnstalleerd met behulp van:

npm install jquery

Voorbeeld:

var $ = require('jquery');
var http = require('http');
var options = {
    host: 'jquery.com',
    port: 80,
    path: '/'
};
var html = '';
http.get(options, function(res) {
res.on('data', function(data) {
    // collect the data chunks to the variable named "html"
    html += data;
}).on('end', function() {
    // the whole of webpage data has been collected. parsing time!
    var title = $(html).find('title').text();
    console.log(title);
 });
});

Referenties van jQuery in Node.js **:


8

Je moet het raam krijgen met behulp van de nieuwe JSDOM API.

const jsdom = require("jsdom");
const { window } = new jsdom.JSDOM(`...`);
var $ = require("jquery")(window);

9

Installeer het eerst

npm install jquery -S

Na het installeren ervan kunt u het gebruiken zoals hieronder

import $ from 'jquery';
window.jQuery = window.$ = $;
$(selector).hide();

U kunt een volledige tutorial bekijken die ik hier schreef: https://medium.com/fbdevclagos/how-to-use-jQuery-on-nod-df731bd6abc7


10

waarschuwing

deze oplossing, zoals vermeld door golo Roden is niet correct . Het is gewoon een snelle oplossing om mensen te helpen hun werkelijke jQuery-code te laten lopen met behulp van een knooppunt-app-structuur, maar het is geen knooppuntfilosofie omdat de jQuery nog steeds op de clientzijde loopt in plaats van aan de serverzijde. Het spijt me voor het geven van een verkeerd antwoord.


Je kunt Jade ook met node renderen en je jQuery-code erin plaatsen. Hier is de code van het jade-bestand:

!!! 5
html(lang="en")
  head
    title Holamundo!
    script(type='text/javascript', src='https://code.jquery.com/jquery-1.9.1.js')
  body
    h1#headTitle Hello, World
    p#content This is an example of Jade.
    script
      $('#headTitle').click(function() {
        $(this).hide();
      });
      $('#content').click(function() {
        $(this).hide();
      });

Antwoord 11

Mijn werkende code is:

npm install jquery

en dan:

global.jQuery   = require('jquery');
global.$        = global.jQuery;

of als het venster aanwezig is, dan:

typeof window !== "undefined" ? window : this;
window.jQuery   = require('jquery');
window.$        = window.jQuery;

Antwoord 12

Geen van deze oplossingen heeft me geholpen in mijn Electron-app.

Mijn oplossing (tijdelijke oplossing):

npm install jquery

In uw index.js-bestand:

var jQuery = $ = require('jquery');

In uw .js-bestanden schrijft u uw jQuery-functies op deze manier:

jQuery(document).ready(function() {

Antwoord 13

De module jsdomis een geweldig hulpmiddel. Maar als je hele pagina’s wilt evalueren en wat funky dingen op de server wilt doen, raad ik aan ze in hun eigen context te gebruiken:

vm.runInContext

Dus dingen als require/ CommonJSter plaatse zullen je Node-proces zelf niet opblazen.

Je kunt hierdocumentatie vinden. Proost!


Antwoord 14

Vanaf jsdom v10 is de functie .env() verouderd. Ik deed het zoals hieronder na veel dingen geprobeerd te hebben om jQuery te vereisen:

var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);

Antwoord 15

Ja, jQuerykan worden gebruikt met Node.js.

Stappen om jQuery in node-project op te nemen:-

npm i jquery --save
Neem jQuery op in codes

import jQuery from 'jquery';
const $ = jQuery;

Ik gebruik altijd jQuery in node.js-projecten, met name in het project van de Chrome-extensie.

bijv. https://github.com/ fxnoob/gesture-control-chrome-extension/blob/master/src/default_plugins/tab.js


Antwoord 16

Nee. Het zal nogal wat moeite kosten om een browseromgeving naar node te porten.

Een andere benadering, die ik momenteel aan het onderzoeken ben voor het testen van eenheden, is het maken van een “Mock”-versie van jQuery die callbacks biedt wanneer een selector wordt aangeroepen.

Op deze manier kunt u uw jQuery-plug-ins testen zonder daadwerkelijk een DOM te hebben. Je zult nog steeds in echte browsers moeten testen om te zien of je code in het wild werkt, maar als je browserspecifieke problemen ontdekt, kun je die ook gemakkelijk “spotten” in je unit-tests.

Ik zal iets naar github.com/felixge pushen zodra het klaar is om te laten zien.


Antwoord 17

Je kunt Electrongebruiken, het staat hybride browserjs en nodejs toe.

Vroeger probeerde ik canvas2d te gebruiken in nodejs, maar uiteindelijk gaf ik het op. Het wordt niet ondersteund door de standaard nodejs, en te moeilijk om het te installeren (veel, veel … afhankelijkheden).
Totdat ik Electron gebruik, kan ik gemakkelijk al mijn vorige browserjs-code gebruiken, zelfs WebGL, en de resultaatwaarde (bijv. resultaat base64-afbeeldingsgegevens) doorgeven aan nodejs-code.


Antwoord 18

Niet dat ik weet. De DOM is een client-side ding (jQuery ontleedt niet de HTML, maar de DOM).

Hier zijn enkele huidige Node.js-projecten:

https://github.com/ry/node/wiki(https://github.com/nodejs/node)

En SimonW’s djangodeis verdomd cool…


Antwoord 19

Een alternatief is om Underscore.jste gebruiken. Het zou moeten bieden wat je server-side van JQuery zou willen hebben.

Other episodes