- Notifications
You must be signed in to change notification settings - Fork20.6k
jquery/jquery
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
jQuery — New Wave JavaScript
In the spirit of open source software development, jQuery always encourages community code contribution. To help you get started and before you jump into writing code, be sure to read these important contribution guidelines thoroughly:
- Browser support
- jQuery also supports Node, browser extensions, and other non-browser environments.
To build jQuery, you need to have the latest Node.js/npm and git 1.7 or later. Earlier versions might work, but are not supported.
For Windows, you have to download and installgit andNode.js.
macOS users should installHomebrew. Once Homebrew is installed, runbrew install git
to install git,andbrew install node
to install Node.js.
Linux/BSD users should use their appropriate package managers to install git and Node.js, or build from sourceif you swing that way. Easy-peasy.
First,clone the jQuery git repo.
Then, enter the jquery directory and run the build script:
cd jquery&& npm run build
The built version of jQuery will be put in thedist/
subdirectory, along with the minified copy and associated map file.
If you want to create custom build or help with jQuery development, it would be better to installgrunt command line interface as a global package:
npm install -g grunt-cli
Make sure you havegrunt
installed by testing:
grunt -V
Now by running thegrunt
command, in the jquery directory, you can build a full version of jQuery, just like with annpm run build
command:
grunt
There are many other tasks available for jQuery Core:
grunt -help
Special builds can be created that exclude subsets of jQuery functionality.This allows for smaller custom builds when the builder is certain that those parts of jQuery are not being used.For example, an app that only used JSONP for$.ajax()
and did not need to calculate offsets or positions of elements could exclude the offset and ajax/xhr modules.
Any module may be excluded except forcore
, andselector
. To exclude a module, pass its path relative to thesrc
folder (without the.js
extension).
Some example modules that can be excluded are:
- ajax: All AJAX functionality:
$.ajax()
,$.get()
,$.post()
,$.ajaxSetup()
,.load()
, transports, and ajax event shorthands such as.ajaxStart()
. - ajax/xhr: The XMLHTTPRequest AJAX transport only.
- ajax/script: The
<script>
AJAX transport only; used to retrieve scripts. - ajax/jsonp: The JSONP AJAX transport only; depends on the ajax/script transport.
- css: The
.css()
method. Also removesall modules depending on css (includingeffects,dimensions, andoffset). - css/showHide: Non-animated
.show()
,.hide()
and.toggle()
; can be excluded if you use classes or explicit.css()
calls to set thedisplay
property. Also removes theeffects module. - deprecated: Methods documented as deprecated but not yet removed.
- dimensions: The
.width()
and.height()
methods, includinginner-
andouter-
variations. - effects: The
.animate()
method and its shorthands such as.slideUp()
or.hide("slow")
. - event: The
.on()
and.off()
methods and all event functionality. - event/trigger: The
.trigger()
and.triggerHandler()
methods. - offset: The
.offset()
,.position()
,.offsetParent()
,.scrollLeft()
, and.scrollTop()
methods. - wrap: The
.wrap()
,.wrapAll()
,.wrapInner()
, and.unwrap()
methods. - core/ready: Exclude the ready module if you place your scripts at the end of the body. Any ready callbacks bound with
jQuery()
will simply be called immediately. However,jQuery(document).ready()
will not be a function and.on("ready", ...)
or similar will not be triggered. - deferred: Exclude jQuery.Deferred. This also removes jQuery.Callbacks.Note that modules that depend on jQuery.Deferred(AJAX, effects, core/ready) will not be removed and will still expect jQuery.Deferred to be there. Include your own jQuery.Deferred implementation or exclude those modules as well (
grunt custom:-deferred,-ajax,-effects,-core/ready
). - exports/global: Exclude the attachment of global jQuery variables ($ and jQuery) to the window.
- exports/amd: Exclude the AMD definition.
The build process shows a message for each dependent module it excludes or includes.
As an option, you can set the module name for jQuery's AMD definition. By default, it is set to "jquery", which plays nicely with plugins and third-party libraries, but there may be cases where you'd like to change this. Simply set the"amd"
option:
grunt custom --amd="custom-name"
Or, to define anonymously, set the name to an empty string.
grunt custom --amd=""
To create a custom build, first check out the version:
git pull; git checkout VERSION
Where VERSION is the version you want to customize. Then, make sure all Node dependencies are installed:
npm install
Create the custom build using thegrunt custom
option, listing the modules to be excluded.
Exclude allajax functionality:
grunt custom:-ajax
Excludingcss removes modules depending on CSS:effects,offset,dimensions.
grunt custom:-css
Exclude a bunch of modules:
grunt custom:-ajax/jsonp,-css,-deprecated,-dimensions,-effects,-offset,-wrap
There is also a special alias to generate a build with the same configuration as the official jQuery Slim build is generated:
grunt custom:slim
For questions or requests regarding custom builds, please start a thread on theDeveloping jQuery Core section of the forum. Due to the combinatorics and custom nature of these builds, they are not regularly tested in jQuery's unit test process.
Make sure you have the necessary dependencies:
npm install
Startgrunt watch
ornpm start
to auto-build jQuery as you work:
grunt watch
Run the unit tests with a local server that supports PHP. Ensure that you run the site from the root directory, not the "test" directory. No database is required. Pre-configured php local servers are available for Windows and Mac. Here are some options:
- Windows:WAMP download
- Mac:MAMP download
- Linux:Setting up LAMP
- Mongoose (most platforms)
To copy the built jQuery files from/dist
to another directory:
grunt&& grunt dist:/path/to/special/location/
With this example, the output files would be:
/path/to/special/location/jquery.js/path/to/special/location/jquery.min.js
To add a permanent copy destination, create a file indist/
called ".destination.json". Inside the file, paste and customize the following:
{"/Absolute/path/to/other/destination":true}
Additionally, both methods can be combined.
As the source code is handled by the Git version control system, it's useful to know some features used.
If you want to purge your working directory back to the status of upstream, the following commands can be used (remember everything you've worked on is gone after these):
git reset --hard upstream/mastergit clean -fdx
For feature/topic branches, you should always use the--rebase
flag togit pull
, or if you are usually handling many temporary "to be in a github pull request" branches, run the following to automate this:
git config branch.autosetuprebaselocal
(seeman git-config
for more information)
If you're getting merge conflicts when merging, instead of editing the conflicted files manually, you can use the featuregit mergetool
. Even though the default toolxxdiff
looks awful/old, it's rather useful.
The following are some commands that can be used there:
Ctrl + Alt + M
- automerge as much as possibleb
- jump to next merge conflicts
- change the order of the conflicted linesu
- undo a mergeleft mouse button
- mark a block to be the winnermiddle mouse button
- mark a line to be the winnerCtrl + S
- saveCtrl + Q
- quit
QUnit Reference
expect(numAssertions);stop();start();
Note: QUnit's eventual addition of an argument to stop/start is ignored in this test suite so that start and stop can be passed as callbacks without worrying about their parameters.
ok(value,[message]);equal(actual,expected,[message]);notEqual(actual,expected,[message]);deepEqual(actual,expected,[message]);notDeepEqual(actual,expected,[message]);strictEqual(actual,expected,[message]);notStrictEqual(actual,expected,[message]);throws(block,[expected],[message]);
Test Suite Convenience Methods Reference (Seetest/data/testinit.js)
q( ...);
Example:
q("main","foo","bar");=>[div#main,span#foo,input#bar]
t(testName,selector,["array","of","ids"]);
Example:
t("Check for something","//[a]",["foo","bar"]);
fireNative(node,eventType)
Example:
fireNative(jQuery("#elem")[0],"click");
url("some/url");
Example:
url("index.html");=>"data/index.html?10538358428943"url("mock.php?foo=bar");=>"data/mock.php?foo=bar&10538358345554"
Some tests may require a document other than the standard test fixture, andthese can be run in a separate iframe. The actual test code and assertionsremain in jQuery's main test files; only the minimal test fixture markupand setup code should be placed in the iframe file.
testIframe(testName,fileName,functiontestCallback(assert,jQuery,window,document,[additionalargs]){...});
This loads a page, constructing a url with fileName"./data/" + fileName
.The iframed page determines when the callback occurs in the test byincluding the "/test/data/iframeTest.js" script and callingstartIframeTest( [ additional args ] )
when appropriate. Often thiswill be after either document ready orwindow.onload
fires.
ThetestCallback
receives the QUnitassert
object created bytestIframe
for this test, followed by the globaljQuery
,window
, anddocument
fromthe iframe. If the iframe code passes any arguments tostartIframeTest
,they follow thedocument
argument.
If you have any questions, please feel free to ask on theDeveloping jQuery Core forum or in #jquery on irc.freenode.net.
About
jQuery JavaScript Library
Topics
Resources
License
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.