jQuery.uniqueId()分配已占用ID:是使用错误还是设计行为?
关于jQuery.uniqueId() 分配重复ID的问题
这属于jQuery UI的设计行为,并不是你使用有误哦。
为什么会出现重复ID?
jQuery UI的uniqueId()方法内部是通过维护一个全局计数器来生成ID的:
- 它从
1开始,每次调用就生成ui-id-+当前计数器值,然后计数器自增1。 - 这个方法不会主动扫描整个DOM去检查ID是否已被占用——它默认假设页面里不会有手动定义的
ui-id-*格式ID,所以如果你的页面HTML里已经存在了比如ui-id-1的元素,当你调用uniqueId()时,它还是会把这个ID分配给新创建的元素,导致重复。
怎么解决这个问题?
如果你需要确保生成的ID绝对唯一,可以参考这两种方式:
- 避免手动使用
ui-id-*格式的ID:遵循jQuery UI的命名约定,让uniqueId()自己管理这类ID的生成,这样它的计数器就能保证生成的ID不重复(只要都是通过这个方法生成的)。 - 自定义唯一ID生成逻辑:如果必须兼容页面已有的
ui-id-*ID,可以自己封装一个检查逻辑,比如:
调用这个自定义方法$.fn.safeUniqueId = function() { return this.each(function() { if (!this.id) { var id; do { id = 'ui-id-' + $.ui.uuid++; } while ($('#' + id).length > 0); this.id = id; } }); };$('<p>').safeUniqueId(),就能确保生成的ID不会和现有DOM中的ID重复。
内容的提问来源于stack exchange,提问作者sazr
相关产品推荐
相关产品推荐

