{"id":13410995,"url":"https://github.com/alfajango/jquery-dynatable","last_synced_at":"2025-12-12T03:53:44.738Z","repository":{"id":1981373,"uuid":"2913117","full_name":"alfajango/jquery-dynatable","owner":"alfajango","description":"A more-fun, semantic, alternative to datatables","archived":false,"fork":false,"pushed_at":"2022-02-25T20:46:46.000Z","size":272,"stargazers_count":2764,"open_issues_count":228,"forks_count":361,"subscribers_count":124,"default_branch":"master","last_synced_at":"2025-05-08T17:11:20.407Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.dynatable.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alfajango.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-12-04T23:47:13.000Z","updated_at":"2025-05-02T04:59:09.000Z","dependencies_parsed_at":"2022-08-19T23:11:38.954Z","dependency_job_id":null,"html_url":"https://github.com/alfajango/jquery-dynatable","commit_stats":null,"previous_names":["jangosteve/jquery-dynatable"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfajango%2Fjquery-dynatable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfajango%2Fjquery-dynatable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfajango%2Fjquery-dynatable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfajango%2Fjquery-dynatable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alfajango","download_url":"https://codeload.github.com/alfajango/jquery-dynatable/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254292040,"owners_count":22046426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-07-30T20:01:10.719Z","updated_at":"2025-12-12T03:53:39.706Z","avatar_url":"https://github.com/alfajango.png","language":"JavaScript","readme":"# jQuery Dynatable\n\n*A funner, semantic, HTML5+JSON, interactive table plugin.*\n\nSee the [full documentation with demos](http://www.dynatable.com).\n\n## Why?\n\nThe purpose of Dynatable is to provide a simple, extensible API, which\nmakes viewing and interacting with larger datasets easy. Dynatable\nprovides a framework for implementing the most common elements out of\nthe box, including sorting, searching and filtering. Above\nall, I wanted a clean and elegant API that is fun to use.\n\n## Quickstart\n\nTo install Dynatable:\n\n* [Download the latest release](http://jspkg.com/packages/dynatable)\n\n## Support\n\nIRC: [Join us at #dynatable on freenode IRC](https://webchat.freenode.net/?channels=dynatable)\n\nBugs and Feature Requests: [Search and open a Github Issue](https://github.com/alfajango/jquery-dynatable/issues)\n\nDebugging: [Fork and edit this template on JSFiddle](http://jsfiddle.net/ty3b7/)\n\nQuestions: [Ask a question tagged with dynatable on\nStackOverflow](http://stackoverflow.com/questions/tagged/dynatable)\n\n## TODO:\n\n* ~~Change `unfilter`s and `filter`s to `reader`s and `writer`s.~~\n* ~~Clean up defaults that are functions, by abstracting into internal\n  named functions which can be re-used.~~\n* Change default sort functions to underscore-namespaced functions so as\n  not to conflict with record attributes called e.g. `search`.\n* Update sort function implementation to be analogous to search function\n  implementation (whereby if a sort function matching attribute name is\n  present, it will be used for that attribute by default).\n* Namespace pushstate query parameters by dynatable instance id to\n  simplify `refreshQueryString` function and prevent conflicts between\n  multiple pushState-enabled instances on one page.\n* ~~Refactor using prototype to abstract dynatable-global functions to\n  improve memory efficiency for multiple instances on one page.~~\n* Implement configurable sorting algorithm (see\n  [JS Merge Sort](http://en.literateprograms.org/Merge_sort_%28JavaScript%29) and [Sorting Table](http://blog.vjeux.com/2010/javascript/javascript-sorting-table.html)).\n* ~~Change from Object.create method to constructor pattern to improve\n  performances (see\n  [benchmark](http://jsperf.com/object-create-vs-constructor-vs-object-literal/7)).~~\n* ~~Use for loops instead of $.each where possible to improve\n  performance.~~\n* ~~Use strings and/or document fragments for writing to DOM, instead of\n  jQuery, by default to improve writing performance.~~\n* Use templated strings to write pagination and other inputs.\n* Make class names for input elements configurable.\n* Use Chrome profiler to find any performance bottlenecks and fix.\n* Simplify API by separating internal-only and accessible model\n  functions.\n* Move sorts and queries functions objects to defaults to make easier to\n  customize and add to on instantiation (like filters and unfilters)\n* Try using CSS-only for ProcessingIndicator.position to avoid querying\n  rendered DOM styling and speed up all operations that position the\n  indicator (see [CSS absolute\n  centering](http://codepen.io/shshaw/full/gEiDt)).\n* Add data-dynatable-attr=\"name\" support for reading records from\n  arbitrary markup (so that you don't need to write a custom rowReader\n  function when starting with e.g. a stylized list).\n* Make sort function first lookup settings.sortTypes[attr], then look\n  directly for sort sorts.functions[attr], and then finally\n  sorts.guessType only if neither of the first two exist.\n* Add global remove/cleanup function (opposite of init) to allow\n  removing dynatable via JS.\n* Support for Zepto?\n\n## Tests\n\nCurrently the testing process consists of opening [the Dynatable\ndocumentation](http://os.alfajango.com/dynatable)\n([source code\nhere](https://github.com/alfajango/alfajango.github.com/blob/master/_posts/2012-01-09-dynatable.md)) in\neach browser and making sure every example works. This is fine for the\ninitial release, since it serves the dual purpose of helping us write\nthe documentation and having a written functional use-case at once.\nHowever, one of the top priorities now is to automate each use-case in\nthe docs as a test case within an automated test suite.\n\nIf anyone out there thinks this sounds like fun, please contact me or\neven go ahead and create an issue/pull request. Otherwise, it will be at\nthe top of my priority list until I can get to it.\n\n## Contributing\n\nPlease see the [Contributing Guidelines](https://github.com/JangoSteve/jquery-dynatable/blob/master/CONTRIBUTING.md).\n\n## Author\n\nSteve Schwartz -\n[JangoSteve on Github](https://github.com/JangoSteve),\n[@jangosteve on Twitter](https://twitter.com/jangosteve)\n\n![Alfa Jango logo](https://s3.amazonaws.com/s3.alfajango.com/github-readmes/AlfaJango_Logo_Black_noname-tiny.png)\n[Alfa Jango Open Source](http://os.alfajango.com) -\n[@alfajango on Twitter](https://twitter.com/alfajango)\n\n## Copyright and License\n\nCopyright 2014 Alfa Jango LLC.\n\nDual licensed, released under the Free Software Foundation's\nGNU Affero General Public License (AGPL), or see [license\ninformation](http://www.dynatable.com/license) for proprietary or\ncommercial applications.\n\n## Miscellaneous\n\n### Refactor performance benchmarks\n\nFor version 0.1.0, Dynatable went through a refactor to use prototypal\ninheritence as a more memory-efficient foundation. Here are some\noff-the-cuff benchmarks I set up when doing this.\n\nThe performance increase was modest, according to these benchmarks, but\nmore importantly, the code became a bit cleaner and easier to work with.\n\nhttp://jsperf.com/dynatable-prototypal-refactor\n\nhttp://jsperf.com/dynatable-refactor/3\n\nCurrently, there's still a bit of performance improvement to be gained\nby further grouping DOM reads and writes (though they're already mostly\ngrouped together), and by using JS string concatenation instead of\njQuery to build the HTML for rendering step.\n\nThe new string concatenation has started to roll out in v0.2.\n","funding_links":[],"categories":["Frontend components","JavaScript","22. 文档/表格/PDF ##","22. 文档/表格/PDF"],"sub_categories":["13.20 视差滚动(Parallax Scrolling) ###","13.20 视差滚动(Parallax Scrolling)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfajango%2Fjquery-dynatable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falfajango%2Fjquery-dynatable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfajango%2Fjquery-dynatable/lists"}