Ответ 1
Вызов
tinyMCE.triggerSave();
после этого вы сможете использовать селектор jquery
$("#yourtextareaID").val();
Я хочу получить значение текстовой области tinymce
<textarea id="thetextarea"></textarea>
на клавиатуре, чтобы передать его в show-preview script, используя:
function showPreview(value) {
$("#preview-container").load("/material-preview.php", {s:value});
}
$('thetextarea').live("keyup",function (e) {
var material = this.value;
showPreview(material);
return false;
});
Если я пытаюсь выбрать textarea id thetextarea
, он не работает (работает, если я не делаю это поле tinymce).
с firebug Я вижу, что текст, когда textarea преобразуется в tinymce, находится в:
<body id="tinymce" class="mceContentBody"></body>
но это тоже не работает (и не $('#tinymce')
)
$('mceContentBody').live("keyup",function (e) {
var material = this.value;
showPreview(material);
return false;
});
HTML-код (из firebug) после того, как tinyMCE применяется по запросу
<textarea id="material-input" class="mceEditor text" style="width: 310px ! important; height: 250px ! important; display: none;" name="material" aria-hidden="true"></textarea>
<span id="material-input_parent" class="mceEditor defaultSkin" role="application" aria-labelledby="material-input_voice">
<span id="material-input_voice" class="mceVoiceLabel" style="display:none;">Rich Text Area</span>
<table id="material-input_tbl" class="mceLayout" cellspacing="0" cellpadding="0" role="presentation" style="width: 310px; height: 250px;">
<tbody>
<tr class="mceFirst" role="presentation">
<tr>
<td class="mceIframeContainer mceFirst mceLast">
<iframe id="material-input_ifr" frameborder="0" src="javascript:""" allowtransparency="true" title="Rich Text Area. Press ALT F10 for toolbar. Press ALT 0 for help." style="width: 100%; height: 206px;">
<html>
<head xmlns="http://www.w3.org/1999/xhtml">
<body id="tinymce" class="mceContentBody " contenteditable="true" spellcheck="false" dir="ltr">
<!-- the text inside tinymce textarea -->
</body>
</iframe>
</td>
</tr>
<tr class="mceLast">
</tbody>
</table>
</span>
Вызов
tinyMCE.triggerSave();
после этого вы сможете использовать селектор jquery
$("#yourtextareaID").val();
tinyMCE.get('yourTextAreaId').getContent();
См. следующую ссылку о том, как определить событие onKeyUp для работы с TinyMCE:
http://www.tinymce.com/wiki.php/API3:event.tinymce.Editor.onKeyUp
По сути, когда вы инициализируете tinyMCE, вы определяете обработчик события onKeyUp. Я думаю, что обычный селектор не будет работать здесь, так как текст находится внутри отдельного iFrame. API TinyMCE перечисляет метод .getContent()
, который может работать. то есть. Что-то вроде этого:
tinyMCE.init({
setup : function(ed) {
ed.onKeyUp.add(function(ed, e) {
//showPreview ( $('.mceContentBody').val() );
showPreview (tinyMCE.activeEditor.getContent({format : 'raw'}) );
});
}
});
Также смотрите: http://www.tinymce.com/wiki.php/API3:method.tinymce.Editor.getContent
Ваша проблема больше связана с TinyMCE, чем с jQuery или Javascript. Если вышеуказанное не работает, вам нужно будет прочитать документы TinyMCE и/или API, чтобы выяснить, как сделать то, что вы хотите достичь.
TinyMCE предоставляет jQuery pluggin, который вы можете использовать в сочетании с onKeyUp в API
$('textarea.tinymce').tinymce({
// Location of TinyMCE script
script_url : 'path/to/tiny_mce.js',
theme : "simple",
setup : function(ed) {
ed.onKeyUp.add(function(ed, l) {
console.debug('Key up event: ' + e.keyCode);
});
}
});
Существует также плагин предварительного просмотра , который, как я подозреваю, делает то, что вы были более непосредственно.
Вы также можете использовать это.
tinyMCE.activeEditor.getContent();
В приведенном выше примере ваш селектор ошибочен. Это должно быть:
$('#thetextarea').live("keyup",function (e) {
не
$('thetextarea').live("keyup",function (e) {
Это просто опечатка в вашем вопросе?
Если вы не уверены, какой элемент имеет текст, который вам нужен, вы можете попробовать добавить обработчик событий к обоим элементам. Также я думаю, что вы должны использовать $(this).val()
vs. this.val
:
$('#thetextarea, .mceContentBody').live("keyup",function (e) {
var material = $(this).val();
showPreview(material);
return false;
});
tinymce.innerHTML
дает мне требуемый результат