Chosen和Select2有什么区别?
Chosen和Select2是扩展select框的两个更受欢迎的库。
两者似乎都得到了积极的维护,select比较老,同时支持jQuery和Prototype。
Select2仅仅是jQuery,它的文档说Select2是受select启发的,但没有详细说明任何改进(如果有的话)或其他重写的原因。
两个库具有几乎相同的function集,唯一比较我发现是一个有点不确定的jsperftesting页面。
这些库中的任何一个都比另一个有什么优势?
从Select2 3.3.1开始,以下是README.md中logging的内容
Select2支持select什么不是?
- 处理大型数据集:select要求将整个数据集作为
option
标签加载到DOM中,这限制了它使用小型数据集。 Select2使用一个函数来实时查找结果,从而可以部分加载结果。- 分页结果:由于Select2与大数据集一起工作,并且一次只加载less量的匹配结果,所以它必须支持分页。 当用户滚动到当前加载的结果集的底部时,Select2将调用searchfunction,以允许结果的“无限滚动”。
- 结果的自定义标记:select仅支持呈现文本结果,因为这是
option
标记唯一支持的标记。 Select2提供了一个扩展点,可以用来产生任何types的标记来表示结果。- 能够实时添加结果:Select2提供了从用户input的search词添加结果的function,可以将其用于标记。
恕我直言select是“维持”,但不是“积极维护”。 select341个问题和51个请求。 Select2有128个问题和25个请求。 我认为这些模式基本上是
- 挑一个表面上更吸引你
- 在一两个应用程序中使用它
- 碰撞定制问题或限制
- 也许尝试通过问题和拉请求与社区合作
- 最终会感到厌倦,用你在这个过程中学到的东西来build立你自己的
无论你select哪一个,如果你的用例正好在他们的最佳位置,那么任何一个都可以工作。 如果没有,你最终必须自己编写或大量定制这些。 无论哪种情况,select哪一个都不是那么重要。 我想我会在@Andy Ray和@paul这边,Select2可能是更好的初始select。
另外值得一提的是, Chosen
是在Sass
和CoffeeScript
开发的,而Select2
是纯CSS
和JS
。 这是我个人的select, Sass
和CoffeeScript
是不必要的复杂层面,使debugging变得困难。
试了两个后,我决定不使用 – 试图让Select2
创build项目function变成一件非常毛茸茸的事情,因为当你连接到<select>
元素时根本无法做到这一点 – 它只是没有感觉到很好的想法我将不得不跳过。
我已经决定使用selectize.js ,它只是添加新的<option>...</option>
元素到窗体的DOM – 这是理智的。 它也使用LESS
– 但我会绕过,只是直接在您的项目中裁剪编译的CSS
。
chosen.js与select2.js
- 麻省理工学院的执照
- 依赖关系:
- Select2:jQuery
- select:tbc
- 桌面浏览器支持:
- select2:IE8 +
- select:IE8 +
- 设备支持:
- select2:不清楚
- select:在iPhone,iPod Touch和Android移动设备上禁用
- 重量(缩小):
- select2:57KB
- select:27KB
- 用法:Select2支持更多的“花哨”UI(请参阅“模板”)
- 这两个代码回购在Github上都可用
- select2:贡献:非常活跃
- select:贡献:比select2less3倍
PS。 我会尝试更新这个答案,当我发现更多关于缺less的点
首先,让我告诉你,Chosen和Select2是两个伟大的插件,这是我个人关于Chosen的经验。 他们所说的一切都是真实的关于select。
PēterisCaune指出的问题是2岁,仍然没有正式的解决办法。 API根本没有好的文档。 有人指出(观看问题671)许多时间,但仍然没有任何东西。 他们花了差不多2年的时间来解决这个问题 ,如果你select了基本上不工作,如果你隐藏的div overflow:hidden
之前,显示它(你必须使用witdh:X%
选项,你基本上永远不知道你是否不'不要找这个问题)。
我想说的主要问题是像第92期的DelvarWorld所说的修复速度:
我的拉取请求解决了这个问题,但像我的另一个和许多select他们被忽略。 这个项目有太多的代码太less的贡献者。
我首先select了MIT的许可证,但是我有所有这些问题(下拉菜单,没有findAPI,寻找隐藏溢出的小时数),所以我决定切换到select2,因为它有更好的文档,没有下拉菜单和更快的修复。
在Select2中有一个function,但在select中不起作用的是select
内部有overflow: hidden
元素overflow: hidden
或overflow: auto
。
相应的问题select: https : //github.com/harvesthq/chosen/issues/86
我发现与这两个插件有一些差异:
-
使用select2,您可以在选项中的任何位置进行search。 例如,如果您有一个名为ABCDEFG的选项,并且您inputCDE,您将在search结果中获得该选项,但是select您必须键入AB ..等等以获得结果。
-
我发现,对于较大的数据集,select似乎比select2更快,尤其是在IE中。
Select2支持移动,而select专门禁用 iPod,iPhone和移动Android 本身 。 如果您想在移动设备上使用“扩展”select框,这将使您的select变得简单。
我对Select2的体验在台式机上非常棒,但是触摸移动设备差异很大,总有一些怪癖。 例如,在Xperia st15i与ics和股票浏览器下拉总是closures本身,因为键盘窃取焦点。 只有再次打开它的方法是触摸菜单几十次,握住手指和其他伏都教的魔法。 或者在下拉列表closures的情况下开始input,有多less用户会知道这一点?
Selectize.js似乎比Select2平滑得多,但它在移动设备上也有问题,例如当select了值或input时,由于某种原因,它一直向左移动页面。 而且,在不支持溢出的较旧的Android 2.x设备上,由于键盘不popup,所以不可能select几个顶级选项。 🙁
仍然必须testingselect,毕竟,终于禁用移动设备可能不是一个坏主意,但最终旧的老式下拉工作总是随处可见。
更新:现在我也testing了select,并在一个领域更好:它不能在默认情况下移动(伟大!),但它具有过滤单词问题。 例如,在文字中间不search,如果使用黑客进行alignment,它也将忽略完整的选项。 回到绘图板。
Select2支持AJAXselect不
select2比select的稍大一些。
我切换到Select2是因为没有官方支持ajax操作。
为什么我select了select2而不是select
关键特征select2具有,没有其他控件具有自动神奇的效果,是在控件的右侧用“x”清除所有选项。 这是我的应用程序的杀手级function。 我不知道为什么其他select标签增强库缺乏这个function。