Return 当对象标签也是动态时对象绑定到动态元素

Return object bound to a dynamic element when label for object is also dynamic

我正在使用 CKEditor。在我的页面中,用户可以动态 add/remove 包含 WYSIWYG ckeditor 文本编辑器的元素。

CKEDITOR.instances returns 一个包含我页面上所有 ck_editor 对象的对象。

当用户单击 add 按钮时,以下代码成功抓取该元素:

CKEDITOR.instances[“my_textarea_0_body"]

问题出在用户单击 delete 删除该元素,然后重新单击 add 时。我现在想在页面上获取 new ckeditor 元素。但是,现在我需要用这个来抓住它:

CKEDITOR.instances[“my_textarea_1_body"]

请注意,号码已更改。因此,用户可以多次切换此元素的 add/remove。示例:如果他们这样做了 100 次,我需要有一种方法可以像这样抓住那个对象:

CKEDITOR.instances[“my_textarea_100_body"]

问题是我永远不知道那个数字是多少。这个数字对我创建字符串以获取适当的对象至关重要。

问题:如何获取包含在 CKEDITOR.instances 对象中的动态标记对象?我知道我想要的对象将永远是附加在 CKEDITOR.instances 对象中的最后一个对象。

我假设CKEDITOR.instancess是一种地图(字典),所以你可以通过Object.keys()得到所有的键名。然后 select last/first/ 或 n-th 实例名称。

var mapping_length = Object.keys(CKEDITOR.instances).length;
var object_label   = Object.keys(CKEDITOR.instances)[mapping_length - 1];
CKEDITOR.instances[object_label];

这将从该字典对象中return所需的对象。

您可以创建一个辅助函数来检查正则表达式匹配。该字段的正则表达式应为:

my_textarea_\d+_body

然后你可以modify/add实例的新对象键

正则表达式确实是你的朋友。 /^CKEDITOR\.instances\["my_textarea_\d+_body"\]$/.test(str) 应该可以完成任务。 (如果您复制并粘贴任何初始示例进行测试,它将失败,但是因为您在那里有一个斜引号非法字符)

console.log(/^CKEDITOR\.instances\["my_textarea_\d+_body"\]$/.test('CKEDITOR.instances["my_textarea_0_body"]'))

我想我明白你的意思 - 你知道密钥的模糊结构,但当你试图检索它时并不确切是什么。在这种情况下,您需要在 CKEDITOR.instances 对象的键中搜索任何与该模式匹配的键。所以,let matchingKeys = Object.keys(CKEDITOR.instances).filter(key => /^my_textarea_\d+_body$/.test(key))。这将 return 一组匹配该模式的所有键。