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是在SassCoffeeScript开发的,而Select2是纯CSSJS 。 这是我个人的select, SassCoffeeScript是不必要的复杂层面,使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倍

select2.js贡献chosen.js的贡献

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: hiddenoverflow: 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。