我正在使用CKEditor。在我的页面中,用户可以动态添加/删除包含WYSIWYG ckeditor文本编辑器的元素。
CKEDITOR.instances
返回一个对象,其中包含我页面上的所有ck_editor对象。
当用户单击add
按钮时,以下代码成功获取该元素:
CKEDITOR.instances[“my_textarea_0_body"]
问题是用户点击delete
删除该元素,然后重新点击add
。我现在想在页面上抓取 new ckeditor元素。但是,现在我需要抓住它:
CKEDITOR.instances[“my_textarea_1_body"]
请注意,号码已更改。因此,用户可以多次切换添加/删除此元素。例如:如果他们做了100次,我需要有办法抓住那个对象:
CKEDITOR.instances[“my_textarea_100_body"]
问题是我永远不知道这个数字是多少。这个数字对于我创建字符串以获取适当的对象至关重要。
问题:如何获取CKEDITOR.instances
对象中包含的动态标记对象?我知道我所需的对象将永远是附加在CKEDITOR.instances
对象中的最后一个对象。
答案 0 :(得分:2)
我假设CKEDITOR.instancess
是一种地图(字典),因此您可以通过Object.keys()获取所有关键名称。然后选择最后/第一个/或第n个实例名称。
var mapping_length = Object.keys(CKEDITOR.instances).length;
var object_label = Object.keys(CKEDITOR.instances)[mapping_length - 1];
CKEDITOR.instances[object_label];
这将从该字典对象中返回所需的对象。
答案 1 :(得分:2)
正则表达确实是你的朋友。 /^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))
。这将返回一组与该模式匹配的所有键。
答案 2 :(得分:1)
您可以创建一个帮助函数来检查正则表达式匹配。该字段的正则表达式应为:
my_textarea_\d+_body
然后您可以修改/添加新对象键到实例