使用https://github.com/toopay/bootstrap-markdown/时,此标记编辑器没有任何方法来卸载/删除编辑器。在某些情况下,需要在加载编辑器后将其移除,例如切换编辑器。
编辑器被加载到文本区域,如下所示:
$("#some-textarea").markdown({autofocus:false,savable:false})我不知道DOM在哪里访问编辑器元素,也不知道如何操作它的对象。
附言:
这就是我如何解决这个问题的,这个编辑器没有任何类型的销毁/卸载功能,在加载它时,通过向附加TextArea的父对象添加一些元素来更改DOM。有了替换文本区域的想法(特别感谢https://stackoverflow.com/users/1326271/adam-wolski ),我首先想到了复制父节点,并在切换时用加载的编辑器替换复制的节点,但在javascript中通过值(而不是引用)复制是完全失败的,以下是我尝试过的解决方案:
$('#editorPlace').clone(); //copies the node tree be reference
$.extend(true, {}, $('#editorPlace')); //still copies by reference因此,我被迫重新创建所需的元素并删除旧元素,另一个问题是我无法控制节点树,表单是自动生成的。最后,解决方案是创建一个容器元素,并在其中添加一个新创建的文本区域。然后将容器附加到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);发布于 2017-02-27 07:03:12
如果插件本身不公开任何destroy方法,那么这个问题就没有通用的解决方案。尽管您可以:
a)找出插件对DOM元素做了什么,并反转它
b)从DOM中删除该节点并添加一个新节点。
在您的情况下,如果您想要切换编辑器,您可以使用选项b)。因为bootstrap-markdown使用一些自定义标记包装了textarea,所以您可能需要删除它的父级。像这样:
$("#some-textarea").parents('.md-editor').remove()然后,创建一个新的textarea元素,附加新的编辑器,并将其附加到DOM所需的位置。
https://stackoverflow.com/questions/42474881
复制相似问题