2010-12-09 5 views
4

Wenn ich versuche, eine Textarea mit cloneNote (true) zu klonen, ist die geklonte Textfläche nicht editierbar. Weiß jemand, wie man das Problem löst? Die Beispielcodes lauten wie folgt:wie man tinyMCE für eine geklonte Textfläche bearbeiten kann durch cloneNode (true) Funktion

<html> 
<head> 
<script type="text/javascript" src="/javascripts/tiny_mce/tiny_mce.js"></script> 
<script type="text/javascript"> 
tinyMCE.init({ 
     theme : "advanced", 
     mode : "textareas", 
}); 
</script> 

<script type="text/javascript"> 

testclonenode = { 

    addAbove : function (element) { 
     var rowEl = element.parentNode.parentNode.parentNode; 
     var rowElClone = rowEl.cloneNode(true); 

     rowEl.parentNode.insertBefore(rowElClone, rowEl); 

     return false; 
    } 
}; 
</script> 
</head> 

<body> 
<table> 
<tr><td> 
    <textarea name="content" style="width:100%">this is a test </textarea> 
<p> <button onclick='return testclonenode.addAbove.call(testclonenode, this);'> Add above </button> 
</td></tr> 
</table> 
</body></html> 

Antwort

3

Es funktioniert nicht so. Außerdem ist es unmöglich, einen Tinymce-Editor mit Dom-Manipulation zu verschieben.

Die tinymce Wiki heißt es wie folgt:

mceAddControl

Konvertiert den angegebenen Textbereich oder div in einen Editor-Instanz mit der angegebenen ID.

Beispiel:

tinyMCE.execCommand('mceAddControl',false,'mydiv'); 

Also, wenn Sie einen Textbereich klonen gibt es ein weiteres Problem: Sie erhalten die gleiche ID haben zweimal die zu Fehlern führen, die richtige tinymce Instanz zugreifen.

+0

danke, ich habe mein Problem behoben – mark

+0

froh, in der Lage zu sein, zu helfen (bitte erwägen, für meine Antwort zu stimmen und es zu akzeptieren) – Thariama

1

Ich habe dies durch die Verwendung einer ID zu arbeiten, die jedes Mal, wenn mein Klon-Funktion wird ausgelöst, erhöht wird, so

var insertslideID = 0; 
function slideclone() { 
    $('<div class="slides"><textarea name="newslide['+insertslideID+'][slide_desc]" id="mydiv'+insertslideID+'"></textarea></div>').insertAfter('div.slides:last'); 
    tinyMCE.execCommand('mceAddControl',false,'mydiv'+insertslideID); 
    insertslideID++; 
} 
$('input[name=addaslidebtn]').click(slideclone); 

scheint zu funktionieren.

1

Ein bisschen sauberer, ich benutze nur eine Nummer für meine ID - copy1 ist der Name meiner Taste - Ich füge das neue Element an das Ende meines Containers.

var count = 0; 


$("#copy1").click(function(){ 
    var newId = count; 
    $("#first").clone().appendTo("#container").prop({ id: newId, }); 
    tinyMCE.execCommand('mceAddControl',false,newId); 
    count++; 
    }); 
0

Ich lief in ein ähnliches Problem, außer meiner Element-IDs (nicht nur Textbereiche) könnte alles sein, und die gleiche ID zweimal war immer erscheinen. Was ich getan habe, sollte schrecklich ineffizient sein, aber es gab keinen merklichen Leistungsverlust mit Dutzenden von Elementen auf der Seite.

Grundsätzlich ich die TinyMCE ID zuerst entfernt (verwendet jQuery):

$(new_element).find('.mce-content-body').each(function() { 
    $(this).removeAttr('id'); 
}); 

Dann reinitialisiert I TinyMCE für alle relevanten Elemente.

Verwandte Themen