Я работаю с CKEditor и создал кнопку Post
, чтобы опубликовать то, что пользователь вводит в редакторе. Я хочу, чтобы кнопка Post
была отключена или включена в зависимости от того, был ли введен фактический текст в редакторе. Однако, если пользователь просто нажимает на элементы формы (B
, I
и т.д.) без типизации DOM заполняется пустыми тегами, как это: <strike><b></b><i></i></strike>
. Это приводит к тому моему парсеру интерпретировать текстовое поле как имеющий текст, когда я делаю эту проверку:Фильтровать текст из переменной с помощью jquery
this.textData = $('.noteEditor1').ckeditorGet().getSnapshot()
.replace(/<br\s*[\/]?>/gi, "\n")
.replace(/ /g, " ");
//if there is no style on the text, $(this.textData).text() will be an empty string, so make sure it contains brackets and isn't empty
// before using it
if(this.textData.indexOf('<') !== -1 && this.textData.indexOf('>') !== -1 && $(this.textData).text() !== "") {
this.textData = $(this.textData).text();
}
//have to remove zero width spaces characters so they aren't counted in the text length
var text = this.textData.replace(/[\n?\r?\t?]/g, "")
.replace(/[\u200B-\u200D\uFEFF]/g, '');
if(text.length > 0) {
$('.footer-btn').removeAttr('disabled');
} else {
$('.footer-btn').attr('disabled', 'disabled');
}
Я нашел этот фильтр JQuery на this question который я думаю, будет делать то, что я хочу, когда я положил несколько селекторов в нем.
$('b, i, u, strike, sub, sup').filter(function(){
return $(this).text().trim().length===0;
}).remove();
Как получить этот фильтр, чтобы работать на моей переменной, this.textData
?
EDIT! ВАЖНО
Я добавил остальные функции, потому что это выглядит как проблема возникает из этого if
заявления. Я должен сделать эту проверку, потому что, если я этого не сделаю, тогда текст, который не имеет никакого стиля, будет лишен. Однако с этим я заканчиваю не, используя $(this.textData).text()
, когда у меня только пустые теги, а это значит, что теги прилипают, поэтому я должен их фильтровать. Как я могу убедиться, что я не очищаю неформатированный текст, но все же очищаю пустые теги форматирования?
Я попытался с помощью фильтра выше, как это:
$(text).find('b, i, u, strike, sub, sup').filter(function(){
return $(this).text().trim().length===0;
}).remove();
Но это не работает.
Можете ли вы привести пример стоимости 'this.textData'? – DanC
Что такое textData. Что у него есть? – PSL
Согласно минимальному примеру, вы указали, что это «должно» работать. http://jsfiddle.net/ANtKJ/ – DanC