2013-05-03 2 views
0

Я работаю с CKEditor и создал кнопку Post, чтобы опубликовать то, что пользователь вводит в редакторе. Я хочу, чтобы кнопка Post была отключена или включена в зависимости от того, был ли введен фактический текст в редакторе. Однако, если пользователь просто нажимает на элементы формы (B, I и т.д.) без типизации DOM заполняется пустыми тегами, как это: <strike><b></b><i></i></strike>. Это приводит к тому моему парсеру интерпретировать текстовое поле как имеющий текст, когда я делаю эту проверку:Фильтровать текст из переменной с помощью jquery

this.textData = $('.noteEditor1').ckeditorGet().getSnapshot() 
               .replace(/<br\s*[\/]?>/gi, "\n") 
               .replace(/&nbsp;/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(); 

Но это не работает.

+0

Можете ли вы привести пример стоимости 'this.textData'? – DanC

+0

Что такое textData. Что у него есть? – PSL

+1

Согласно минимальному примеру, вы указали, что это «должно» работать. http://jsfiddle.net/ANtKJ/ – DanC

ответ

1

Хорошо, последний выстрел

this.textData = $('.noteEditor1').ckeditorGet().getSnapshot(); 
var text = $.trim($(this.textData).text()); 

if(text.length > 0) { 
    $('.footer-btn').removeAttr('disabled'); 
} else { 
    $('.footer-btn').attr('disabled', 'disabled'); 
} 
+0

Как я уже сказал в своем пересмотренном ответе, я не всегда могу использовать '$ (this.textData) .text()', потому что он удаляет текст, когда нет тегов стиля. –

+1

А как насчет обмана? -> '$ ('

' + this.textData + '
') .text()' – DanC

+0

О, хватит, это может быть! –

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