当对象的标签也是动态的时,返回绑定到动态元素的对象

时间:2018-03-12 17:02:35

标签: javascript jquery ckeditor

我正在使用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对象中的最后一个对象。

3 个答案:

答案 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

然后您可以修改/添加新对象键到实例