使用https://github.com/toopay/bootstrap-markdown/此降价编辑器没有任何方法可以卸载/删除编辑器。在某些情况下,需要在加载后删除编辑器,例如,切换编辑。
编辑器加载在textarea上,如下所示:
$("#some-textarea").markdown({autofocus:false,savable:false})
我不知道DOM在哪里访问编辑器元素或如何操纵它的对象。
以下是我解决问题的方法,这个编辑器没有任何类型的销毁/卸载功能,加载它时通过向追加TextArea的父级添加一些元素来改变DOM。 有了替换textarea的想法(特别感谢https://stackoverflow.com/users/1326271/adam-wolski)我首先想出了复制父节点并在切换时用加载的编辑器替换复制的节点,但是按值复制完全失败(不是参考) )在javascript中,这是我累的解决方案:
$('#editorPlace').clone(); //copies the node tree be reference
$.extend(true, {}, $('#editorPlace')); //still copies by reference
所以我被迫再次创建所需元素并删除旧元素,另一个问题是我无法控制节点树,表单自动生成。最后,解决方案是创建一个容器元素并向其添加一个新创建的textarea。然后将容器附加到Textarea必须放置的地方旁边的兄弟姐妹。这是代码:
$('#messageContainer').remove();
$('#someTextarea').remove();//for the first call
var div = document.createElement('div');
div.setAttribute('id', 'messageContainer');
var ta = document.createElement('textarea');
ta.setAttribute('id', 'messageArea');
ta.setAttribute('class', 'form-control');
ta.setAttribute('name', 'someTextarea');
div.appendChild(ta);
$("label[for='someTextarea']").after(div);
答案 0 :(得分:1)
如果插件本身没有公开任何destroy
方法,则没有针对此问题的通用解决方案。虽然你可以:
a)找出插件对DOM元素的作用并将其反转
b)从DOM中删除节点并添加一个新节点。
在您的情况下,如果您想切换编辑器,您可以使用选项b)。因为bootstrap-markdown使用一些自定义标记包装textarea,所以您可能需要删除其父级。像:
$("#some-textarea").parents('.md-editor').remove()
然后,创建一个新的textarea
元素,附加新编辑器并将其附加到理想位置的DOM中。