У меня есть HTML-форма с несколькими полями. Один из них является текстовой областью, управляемой CKEditor.
Когда пользователь хочет отправить форму, я хочу проверить, ввел ли он значения во все поля.
Я знаю, как я могу проверить, имеет ли управление CKEditor что-нибудь в нем, но это могли бы быть "пустые" HTML-тэги без любого текста в нем.
Как я проверяю на текст?
Сторона сервера я использую что-то как обрезка PHP (strip_tags ($content)), таким образом, я хотел бы иметь то же в JavaScript.
Решение с помощью jQuery также было бы применимо.
Это будет работать:
$("#editorContainer iframe").contents().find("body").text();
Это будет содержать только текст, без HTML-тегов.
ОБНОВЛЕНИЕ
Это определенно работает на демонстрационной странице CKEditor .Используйте Firefox и Firebug, перейдите в консоль Firebug и введите:
$("#demoInside iframe").contents().find("body").text();
Консоль распечатает текст в редакторе без тегов html. Убедитесь, что в вашем конкретном приложении установлен правильный селектор. Вы можете проверить свой селектор следующим образом:
$("#demoInside iframe").contents().find("body").length;
Это должно быть равно 1. Если он 0, ваш селектор неправильный.
ОБНОВЛЕНИЕ 2
Опять же, мой код все еще правильный, и он все еще работает на этой странице. Вам просто нужен правильный селектор. На странице, на которую вы ссылаетесь, это
с идентификатором cke_editor1
. Эта конкретная страница не использует jQuery, поэтому требуется дополнительная работа, чтобы доказать, что этот образец работает. Установите FireQuery , выполните jqueryify »страницу, а затем сделайте это в консоли Firebug (обратите внимание, что вам нужно использовать jQuery
, а не $
. Вот как работает FireQuery ).
jQuery("#cke_editor1 iframe").contents().find("body").text();
Короче говоря, убедитесь, что у вас есть правильный селектор для перехода к вашему iframe . Неважно, создаете ли вы свой CKEditor из
. Пока вы можете выбрать
, который CKEditor вводит в DOM, вы можете использовать .contents (). Find ("body"). Text ()
, чтобы получить текст этого iframe. Вы тестировали свой селектор jquery, чтобы узнать, является ли .length == 1
?
Мы используем прототип с этой библиотекой и следующим дополнением:
Element.addMethods({
getInnerText: function(element) {
element = $(element);
return element.innerText && !window.opera ? element.innerText
: element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ');
}
});
(Благодаря Tobie Langel )
Я смог использовать следующую функцию, чтобы определить был ли какой-либо текст внутри CKEditor:
function editorEmpty(instanceName){
var ele = (new Element('div')).update(CKEDITOR.instances[instanceName].getData());
return (ele.getInnerText() == '' || innerText.search(/^( )+$/i) == 0);
}
Обратите внимание на тест для
- часто, когда редактор кажется пустым, он фактически содержит что-то вроде:
.