{"id":17531120,"url":"https://github.com/dzervoudakes/grindstonejs","last_synced_at":"2026-04-07T06:31:12.326Z","repository":{"id":16910315,"uuid":"19671440","full_name":"dzervoudakes/grindstonejs","owner":"dzervoudakes","description":"Quick and dirty DOM manipulation.","archived":false,"fork":false,"pushed_at":"2021-10-16T00:21:34.000Z","size":4248,"stargazers_count":11,"open_issues_count":0,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-01T07:14:55.365Z","etag":null,"topics":["dom","javascript","jquery-alternative","library"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dzervoudakes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-05-11T16:41:27.000Z","updated_at":"2024-04-28T12:15:53.000Z","dependencies_parsed_at":"2022-08-26T14:10:59.991Z","dependency_job_id":null,"html_url":"https://github.com/dzervoudakes/grindstonejs","commit_stats":null,"previous_names":["danziti/grindstonejs"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/dzervoudakes/grindstonejs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzervoudakes%2Fgrindstonejs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzervoudakes%2Fgrindstonejs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzervoudakes%2Fgrindstonejs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzervoudakes%2Fgrindstonejs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dzervoudakes","download_url":"https://codeload.github.com/dzervoudakes/grindstonejs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzervoudakes%2Fgrindstonejs/sbom","scorecard":{"id":36586,"data":{"date":"2025-08-11","repo":{"name":"github.com/dzervoudakes/grindstonejs","commit":"c0b083859e82ad8772ef5de60947a533f537d237"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:88: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/dzervoudakes/grindstonejs/main.yml/main?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/main.yml:20","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":0,"reason":"51 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-897m-rjf5-jp39","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-6vfc-qv3f-vr6c","Warn: Project is vulnerable to: GHSA-5v2h-r2cx-5xgj","Warn: Project is vulnerable to: GHSA-rrrm-qjm4-v8hf","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g","Warn: Project is vulnerable to: GHSA-5fw9-fq32-wv5p","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-hwj9-h5mp-3pm3","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-rjqq-98f6-6j3r","Warn: Project is vulnerable to: GHSA-mjxr-4v3x-q3m4","Warn: Project is vulnerable to: GHSA-cgfm-xwp7-2cvr","Warn: Project is vulnerable to: GHSA-rm97-x556-q36h","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-44c6-4v22-4mhx","Warn: Project is vulnerable to: GHSA-4x5v-gmq8-25ch","Warn: Project is vulnerable to: GHSA-mxhp-79qh-mcx6","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-cf4h-3jhx-xvhq","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T20:27:40.031Z","repository_id":16910315,"created_at":"2025-08-14T20:27:40.031Z","updated_at":"2025-08-14T20:27:40.031Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31503380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dom","javascript","jquery-alternative","library"],"created_at":"2024-10-20T17:22:56.149Z","updated_at":"2026-04-07T06:31:12.308Z","avatar_url":"https://github.com/dzervoudakes.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"⚠️ **This package has been deprecated and will no longer be actively maintained.**\n\n# Grindstone.js\n\n\u003e A lightweight jQuery alternative for modern browsers.\n\n[![npm](https://img.shields.io/npm/v/grindstone.svg)](https://www.npmjs.com/package/grindstone)\n[![build](https://github.com/dzervoudakes/grindstonejs/workflows/Build%20and%20Test/badge.svg)](https://github.com/dzervoudakes/grindstonejs/actions)\n[![codecov](https://codecov.io/gh/dzervoudakes/grindstonejs/branch/main/graph/badge.svg)](https://codecov.io/gh/dzervoudakes/grindstonejs)\n[![quality](https://api.codacy.com/project/badge/Grade/d63676bd689246d4958a7cd2852b7d74)](https://www.codacy.com/gh/dzervoudakes/grindstonejs?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=dzervoudakes/grindstonejs\u0026amp;utm_campaign=Badge_Grade)\n[![prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io/)\n[![license](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/dzervoudakes/grindstonejs/blob/main/LICENSE)\n\n**NPM:**\n\n```\nnpm install grindstone\n```\n\n**Yarn:**\n\n```\nyarn add grindstone\n```\n\n**CDN:**\n\n```\n\u003cscript type=\"text/javascript\" src=\"https://unpkg.com/grindstone@latest/dist/grindstone.min.js\"\u003e\u003c/script\u003e\n```\n\n## Table of Contents\n\n* [Goals](#goals)\n* [Documentation](#documentation)\n* [Dev Instructions](#dev-instructions)\n\n\u003ca id=\"goals\"\u003e\u003c/a\u003e\n\n## Goals\n\nFor the average project, 87kb or so worth of jQuery - minified - is unnecessary. Grindstone.js handles many commonly used methods while weighing in at just 13kb (minified).\n\nThis library does not aim to replace jQuery.\n\nGrindstone.js supports the following browsers:\n\n| Browser | Version |\n| ------- | ------- |\n| Chrome  | 4.0+    |\n| Firefox | 3.5+    |\n| Edge    | 13+     |\n| IE      | 10+     |\n| Safari  | 3.2+    |\n| Opera   | 10.0+   |\n\n\u003ca id=\"documentation\"\u003e\u003c/a\u003e\n\n## Documentation\n\nAs is the case with jQuery, usage is as follows:\n\n```js\n$(selector[, context]);\n```\n\nExtending Grindstone.js by adding new methods is as easy as well:\n\n```js\n$.fn =\u003e Grindstone.prototype\n\n$.fn.someNewMethod = function() {};\n\n$(selector).someNewMethod();\n```\n\nFull documentation on all methods is below.\n\n| Ajax            | Attributes                    | Collection        | Events                      | Filtering           | Forms               | Manipulation                  | Miscellaneous             | Traversing              |\n| --------------- | ----------------------------- | ----------------- | --------------------------- | ------------------- | ------------------- | ----------------------------- | ------------------------- | ----------------------- |\n| [ajax()](#ajax) | [addClass()](#addclass)       | [each()](#each)   | [click()](#click)           | [filter()](#filter) | [submit()](#submit) | [after()](#after)             | [debounce()](#debounce)   | [children()](#children) |\n|                 | [attr()](#attr)               | [eq()](#eq)       | [doubleTap()](#doubleTap)   | [is()](#is)         | [val()](#val)       | [append()](#append)           | [extend()](#extend)       | [contents()](#contents) |\n|                 | [data()](#data)               | [first()](#first) | [focus()](#focus)           | [not()](#not)       |                     | [before()](#before)           | [mouseable()](#mouseable) | [next()](#next)         |\n|                 | [hasAttr()](#hasattr)         | [get()](#get)     | [load()](#load)             |                     |                     | [clone()](#clone)             | [offset()](#offset)       |  [parent()](#parent)    |\n|                 | [hasClass()](#hasclass)       | [last()](#last)   | [off()](#off)               |                     |                     | [css()](#css)                 |                           | [prev()](#prev)         |\n|                 | [removeAttr()](#removeattr)   | [map()](#map)     | [on()](#on)                 |                     |                     | [empty()](#empty)             |                           |                         |\n|                 | [removeClass()](#removeclass) |                   | [ready()](#ready)           |                     |                     | [height()](#height)           |                           |                         |\n|                 | [removeData()](#removedata)   |                   | [resize()](#resize)         |                     |                     | [hide()](#hide)               |                           |                         |\n|                 | [toggleClass()](#toggleclass) |                   | [scroll()](#scroll)         |                     |                     | [html()](#html)               |                           |                         |\n|                 |                               |                   | [scrollLeft()](#scrollLeft) |                     |                     | [prepend()](#prepend)         |                           |                         |\n|                 |                               |                   | [scrollTop()](#scrollTop)   |                     |                     | [remove()](#remove)           |                           |                         |\n|                 |                               |                   | [trigger()](#trigger)       |                     |                     | [replaceWith()](#replacewith) |                           |                         |\n|                 |                               |                   |                             |                     |                     | [show()](#show)               |                           |                         |\n|                 |                               |                   |                             |                     |                     | [width()](#width)             |                           |                         |\n|                 |                               |                   |                             |                     |                     | [wrap()](#wrap)               |                           |                         |\n|                 |                               |                   |                             |                     |                     | [wrapInner()](#wrapinner)     |                           |                         |\n\n\u003ca id=\"ajax\"\u003e\u003c/a\u003e\n\n### ajax()\n\nCreate an XMLHttpRequest.\n\nAcceptable options include:\n* method (GET, POST, PUT, etc.)\n* url (data path)\n* async (true or false)\n* dataType (DOMString, blob, json, document, etc.)\n* body (payload)\n* headers (adds custom HTTP headers to the request)\n\n```js\n$.ajax({\n    method: 'GET',\n    url: 'https://www.something.com/detail',\n    dataType: 'json'\n})\n  .then((resp) =\u003e {})\n  .catch((err) =\u003e {});\n\n$.ajax({\n  method: 'POST',\n  url: 'https://www.something.com/api',\n  body: { form: data },\n  headers: { 'Content-Type': 'application/json' }\n})\n  .then((resp) =\u003e {})\n  .catch((err) =\u003e {});\n```\n\n\u003ca id=\"addclass\"\u003e\u003c/a\u003e\n\n### addClass()\n\nAdd a class or classes to the current set of elements.\n\n```js\n$('#selector').addClass('example');\n$('#selector').addClass('one two');\n```\n\n\u003ca id=\"attr\"\u003e\u003c/a\u003e\n\n### attr()\n\nSet or return the value of the specified attribute.\n\n```js\n$('#selector').addClass('example');\n$('#selector').addClass('one two');\n```\n\n\u003ca id=\"click\"\u003e\u003c/a\u003e\n\n### click()\n\nTrigger a callback on click, or trigger the click itself.\n\n```js\n$('#selector').click();\n$('#selector').click(() =\u003e {});\n```\n\n\u003ca id=\"data\"\u003e\u003c/a\u003e\n\n### data()\n\nAssign a data-value attribute to a set of elements or return the current value of an element.\n\n```js\n$('#selector').data('name');\n$('#selector').data('name', 'value');\n```\n\n\u003ca id=\"hasattr\"\u003e\u003c/a\u003e\n\n### hasAttr()\n\nDetermine if the current element has the specified attribute.\n\n```js\n$('#selector').hasAttr('example');\n```\n\n\u003ca id=\"hasclass\"\u003e\u003c/a\u003e\n\n### hasClass()\n\nDetermine if the elements have the specified class(es).\n\n```js\n$('#selector').hasClass('example');\n$('#selector').hasClass('one two');\n```\n\n\u003ca id=\"removeattr\"\u003e\u003c/a\u003e\n\n### removeAttr()\n\nRemove the the specified attribute.\n\n```js\n$('#selector').removeAttr('example');\n```\n\n\u003ca id=\"removeclass\"\u003e\u003c/a\u003e\n\n### removeClass()\n\nRemove a class or classes from the current set of elements.\n\n```js\n$('#selector').removeClass('example');\n$('#selector').removeClass('one two');\n```\n\n\u003ca id=\"removedata\"\u003e\u003c/a\u003e\n\n### removeData()\n\nRemove a data-value attribute from a set of elements.\n\n```js\n$('#selector').removeData('name');\n```\n\n\u003ca id=\"toggleclass\"\u003e\u003c/a\u003e\n\n### toggleClass()\n\nToggle the specified class(es).\n\n```js\n$('#selector').toggleClass('example');\n$('#selector').toggleClass('one two');\n```\n\n\u003ca id=\"each\"\u003e\u003c/a\u003e\n\n### each()\n\nIterate through each item in the set and execute the callback.\n\n```js\n$('.selector').each((item, index, array) =\u003e {});\n```\n\n\u003ca id=\"eq\"\u003e\u003c/a\u003e\n\n### eq()\n\nReturn the DOM element at the specified index of the current as a new instance of Grindstone.\n\n```js\n$('.selector').eq(2);\n```\n\n\u003ca id=\"first\"\u003e\u003c/a\u003e\n\n### first()\n\nGet the first element.\n\n```js\n$('.selector').first();\n```\n\n\u003ca id=\"get\"\u003e\u003c/a\u003e\n\n### get()\n\nReturn the DOM element at the specified index of the current set.\n\n```js\n$('.selector').get(2);\n```\n\n\u003ca id=\"last\"\u003e\u003c/a\u003e\n\n### last()\n\nGet the last element.\n\n```js\n$('.selector').last();\n```\n\n\u003ca id=\"map\"\u003e\u003c/a\u003e\n\n### map()\n\nMap each element to an array of values.\n\n```js\n$(array).map((item, index, array) =\u003e {});\n```\n\n\u003ca id=\"doubletap\"\u003e\u003c/a\u003e\n\n### doubleTap()\n\nTrigger a function by double-tapping or double-clicking.\n\n```js\n$('#selector').doubleTap(() =\u003e {});\n```\n\n\u003ca id=\"focus\"\u003e\u003c/a\u003e\n\n### focus()\n\nFocus on the first element in the set or trigger a callback when some element is focused on.\n\n```js\n$('#selector').focus();\n$('#selector').focus(() =\u003e {});\n```\n\n\u003ca id=\"load\"\u003e\u003c/a\u003e\n\n### load()\n\nTrigger a function on the load event.\n\n```js\n$(window).load(() =\u003e {});\n```\n\n\u003ca id=\"off\"\u003e\u003c/a\u003e\n\n### off()\n\nRemove an event listener.\n\n```js\n$('#selector').off('change', () =\u003e {});\n$('#selector').off('click touchend', () =\u003e {});\n```\n\n\u003ca id=\"on\"\u003e\u003c/a\u003e\n\n### on()\n\nAssign an event listener.\n\n```js\n$('#selector').on('change', () =\u003e {});\n$('#selector').on('click touchend', () =\u003e {});\n```\n\n\u003ca id=\"ready\"\u003e\u003c/a\u003e\n\n### ready()\n\nTrigger a function when the DOM content is loaded.\n\n```js\n$(document).ready(() =\u003e {});\n```\n\n\u003ca id=\"resize\"\u003e\u003c/a\u003e\n\n### resize()\n\nCapture the resize event from a set of elements and execute a function.\n\n```js\n$(window).resize(() =\u003e {});\n```\n\n\u003ca id=\"scroll\"\u003e\u003c/a\u003e\n\n### scroll()\n\nListen for the scroll event and trigger a function.\n\n```js\n$(window).scroll(() =\u003e {});\n```\n\n\u003ca id=\"scrollleft\"\u003e\u003c/a\u003e\n\n### scrollLeft()\n\nScroll an element to a specific left position relative to its another parent container.\n\nReturn the current left offset of an element, relative to its parent container.\n\n```js\n$('#selector').scrollLeft();\n$('#selector').scrollLeft(50);\n```\n\n\u003ca id=\"scrolltop\"\u003e\u003c/a\u003e\n\n### scrollTop()\n\nScroll an element to a specific top position relative to its another parent container.\n\nReturn the current top offset of an element, relative to its parent container.\n\n```js\n$('#selector').scrollTop();\n$('#selector').scrollTop(50);\n```\n\n\u003ca id=\"trigger\"\u003e\u003c/a\u003e\n\n### trigger()\n\nDispatch a custom event.\n\n```js\n$('#selector').trigger('example');\n```\n\n\u003ca id=\"filter\"\u003e\u003c/a\u003e\n\n### filter()\n\nFilter the elements by the selector or callback function.\n\n```js\n$('.selector').filter('.visible');\n```\n\n\u003ca id=\"is\"\u003e\u003c/a\u003e\n\n### is()\n\nCheck if any of the elements match the given selector or callback function.\n\n```js\n$('.selector').is('.visible');\n```\n\n\u003ca id=\"not\"\u003e\u003c/a\u003e\n\n### not()\n\nExclude matching elements and includes non-matching elements.\n\n```js\n$('.selector').not('.hidden');\n```\n\n\u003ca id=\"submit\"\u003e\u003c/a\u003e\n\n### submit()\n\nSubmit a form or trigger a function when a form is submitted.\n\n```js\n$('#selector').submit();\n$('#selector').submit(() =\u003e {});\n```\n\n\u003ca id=\"val\"\u003e\u003c/a\u003e\n\n### val()\n\nReturn or assign the value of an element.\n\n```js\n$('#selector').val();\n$('#selector').val('7');\n```\n\n\u003ca id=\"after\"\u003e\u003c/a\u003e\n\n### after()\n\nInsert new content after a target element.\n\n```js\n$('#selector').after('\u003cp\u003eHello World\u003c/p\u003e');\n```\n\n\u003ca id=\"append\"\u003e\u003c/a\u003e\n\n### append()\n\nAppend a new element or new content.\n\n```js\n$('#selector').append('#element');\n$('#selector').append('\u003cp\u003eHello World\u003c/p\u003e');\n```\n\n\u003ca id=\"before\"\u003e\u003c/a\u003e\n\n### before()\n\nInsert new content before a target element.\n\n```js\n$('#selector').before('\u003cp\u003eHello World\u003c/p\u003e');\n```\n\n\u003ca id=\"clone\"\u003e\u003c/a\u003e\n\n### clone()\n\nClone the elements in the set.\n\n```js\n$('#selector').clone();\n```\n\n\u003ca id=\"css\"\u003e\u003c/a\u003e\n\n### css()\n\nAdjust the styles of selected elements or return the requested value.\n\n```js\n$('#selector').style('display');\n$('#selector').style('display', 'block');\n$('#selector').style({ display: 'block', color: 'red' });\n```\n\n\u003ca id=\"empty\"\u003e\u003c/a\u003e\n\n### empty()\n\nRemove all child nodes of all elements in the set.\n\n```js\n$('.selector').empty();\n```\n\n\u003ca id=\"height\"\u003e\u003c/a\u003e\n\n### height()\n\nAdjust the height of the selected elements or return the current height value of the first element in the set.\n\n```js\n$('#selector').height();\n$('#selector').height(30);\n```\n\n\u003ca id=\"hide\"\u003e\u003c/a\u003e\n\n### hide()\n\nHide a set of elements.\n\n```js\n$('#selector').hide();\n$('#selector').hide(100);\n```\n\n\u003ca id=\"html\"\u003e\u003c/a\u003e\n\n### html()\n\nReplace an element's innerHTML or return the current innerHTML.\n\n```js\n$('#selector').html();\n$('#selector').html('\u003cp\u003eHello World\u003c/p\u003e');\n```\n\n\u003ca id=\"prepend\"\u003e\u003c/a\u003e\n\n### prepend()\n\nPrepend a new element or new content.\n\n```js\n$('#selector').prepend('#element');\n$('#selector').prepend('\u003cp\u003eHello World\u003c/p\u003e');\n```\n\n\u003ca id=\"remove\"\u003e\u003c/a\u003e\n\n### remove()\n\nRemove elements from the DOM.\n\n```js\n$('#selector').remove();\n$('#selector').remove('.selector');\n```\n\n\u003ca id=\"replacewith\"\u003e\u003c/a\u003e\n\n### replaceWith()\n\nReplace an element with some other content.\n\n```js\n$('#selector').replaceWith('\u003cp\u003eHello World\u003c/p\u003e');\n```\n\n\u003ca id=\"show\"\u003e\u003c/a\u003e\n\n### show()\n\nShow a set of hidden elements.\n\n```js\n$('#selector').show();\n$('#selector').show(100);\n```\n\n\u003ca id=\"width\"\u003e\u003c/a\u003e\n\n### width()\n\nAdjust the width of the selected elements or return the current width value of the first element in the set.\n\n```js\n$('#selector').width();\n$('#selector').width(30);\n```\n\n\u003ca id=\"wrap\"\u003e\u003c/a\u003e\n\n### wrap()\n\nWrap the outer structure of the set of elements.\n\n```js\n$('#selector').wrap('\u003cdiv class=\"outer\"\u003e\u003cdiv class=\"inner\"\u003e');\n```\n\n\u003ca id=\"wrapInner\"\u003e\u003c/a\u003e\n\n### wrapInner()\n\nWrap the inner structure of the set of elements.\n\n```js\n$('#selector').wrapInner('\u003cdiv class=\"outer\"\u003e\u003cdiv class=\"inner\"\u003e');\n```\n\n\u003ca id=\"debounce\"\u003e\u003c/a\u003e\n\n### debounce()\n\nRate-limit a given function.\n\n```js\n$.debounce(() =\u003e {}, 300);\n```\n\n\u003ca id=\"extend\"\u003e\u003c/a\u003e\n\n### extend()\n\nMerge properties from one or more objects into a target object.\n\nExisting properties in the target object will be overwritten if they exist in any of the argument objects.\n\n```js\n$.extend({}, { foo: 'bar' });\n$.extend(obj1, obj2, obj3, obj4);\n```\n\n\u003ca id=\"mouseable\"\u003e\u003c/a\u003e\n\n### mouseable()\n\nAssign hover and active classes.\n\n```js\n$('#selector').mouseable();\n$('#selector').mouseable({ hoverClass: 'stuff', activeClass: 'things' });\n```\n\n\u003ca id=\"offset\"\u003e\u003c/a\u003e\n\n### offset()\n\nReturn the left or top value of the selector, relative to the document.\n\n```js\n$('#selector').offset('left');\n$('#selector').offset('top');\n```\n\n\u003ca id=\"children\"\u003e\u003c/a\u003e\n\n### children()\n\nGet the child elements as a new collection.\n\n```js\n$('#selector').children();\n$('#selector').children('.selector');\n```\n\n\u003ca id=\"contents\"\u003e\u003c/a\u003e\n\n### contents()\n\nGet all the children as a new collection, including text and comments.\n\n```js\n$('#selector').contents();\n```\n\n\u003ca id=\"next\"\u003e\u003c/a\u003e\n\n### next()\n\nGet the next element as a new collection.\n\n```js\n$('#selector').next();\n$('#selector').next('.selector');\n```\n\n\u003ca id=\"parent\"\u003e\u003c/a\u003e\n\n### parent()\n\nGet the parent element as a new collection.\n\n```js\n$('#selector').parent();\n$('#selector').parent('.selector');\n```\n\n\u003ca id=\"prev\"\u003e\u003c/a\u003e\n\n### prev()\n\nGet the previous element as a new collection.\n\n```js\n$('#selector').prev();\n$('#selector').prev('.selector');\n```\n\n- - - -\n\n\u003ca href=\"dev-instructions\"\u003e\u003c/a\u003e\n\n## Dev Instructions\n\n### Install Dependencies\n```\nnpm install\n```\n\n### Run Continuous Build for Development\n```\nnpm start\n```\n\n### Compile\n```\nnpm run build\n```\n\n### Generate Documentation\n```\nnpm run docs\n```\n\n### Run Lint\n```\nnpm run lint\n```\n\n### Run Lint With Fix\n```\nnpm run lint:fix\n```\n\n### Run Unit Tests\n```\nnpm test\n```\n\n### Remove All Build Directories\n```\nnpm run clean\n```\n\n### Run All Checks Before Publish\n```\nnpm run test:all\n```\n\n## Technical Requirements\n\u003e The runtime environment for this library requires `Node \u003e= 13.6.0` and `NPM \u003e= 6.4.1`.\n\n## Configuration\n\u003e This library makes use of `ESLint` and `EditorConfig`. Each of these features requires\n\u003e an extension be installed in order to work properly with IDEs and text editors such as VSCode.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzervoudakes%2Fgrindstonejs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdzervoudakes%2Fgrindstonejs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzervoudakes%2Fgrindstonejs/lists"}