2016-06-21 4 views
0

Я пишу свой собственный плагин для Drupal. Я проверил следующий код в API для событий изменения:CKEditor - получить измененное содержимое и окружающие HTML-теги

editor.on('change', function (evt) { 
    console.log(this.getData()); 
    }); 

с ним, я могу видеть все данные в моем редакторе при изменении. У меня есть контент, структурированный с пользовательскими тегами HTML (которые имеют некоторые атрибуты данных). Мой вопрос: если пользователь пишет какой-то контент, как я могу получить самые близкие теги - и, следовательно, добавить атрибут данных, который был изменен?

Мне также нужен какой-то таймер/задержка, чтобы не вызвать это на каждом нажатии клавиши, я полагаю?

ответ

0

Код, который вы указали, является кодом jQuery. Вы сделали функцию, которая срабатывает при изменении события в редакторе. Он будет срабатывать каждый раз, когда пользователь что-то изменяет в редакторе. Чтобы избежать этого, вы можете сделать что-то вроде этого:

добавить глобальную переменную в родительской области (до вашей функции):

var editorTimer = null; 

затем изменить свою функцию:

if (editorTimer.length) { 
    clearTimeout(editorTimer); 
} 
editorTimer = setTimeout(function() { 
    console.log(this.getData()); 
}, 1000); 

Он очистит последний таймер, а затем подождите 1000 мс (1 с) после каждого изменения, чтобы запустить функцию внутри. Если пользователь ничего не изменит в течение 1 с, будет вызываться функция.

Теперь вам нужно подготовить свою функцию и сменить console.log() на то, что работает. Чтобы найти теги, используйте селекторы jQuery: http://api.jquery.com/category/selectors/

как .closest() или .parents() или .find(), это зависит от того, что вы готовы сделать.

+0

Спасибо. После этого я использовал getSelection() и getRanges(), после чего я установил атрибут родительскому элементу. –

+0

Если бы мой ответ был полезен, пожалуйста, проголосуйте и отметьте как ответ. –

Смежные вопросы