2012-07-06 36 views
5

Używam TinyMCE na stronie tekstowej na mojej stronie. Próbuję uzyskać liczbę znaków i słów oraz wpisano tekst. Próbowałem różnych wersji, aby działało poprawnie, ale bez powodzenia. Oto najnowsza wersja buggy:Liczba znaków TinyMCE niepoprawna

$().ready(function() { 
    $('textarea.tinymce').tinymce({ 
     // Location of TinyMCE script 
     script_url: 'jscripts/tiny_mce/tiny_mce.js', 

     // General options 
     theme: "advanced", 
     plugins: "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist", 

     // Theme options 
     theme_advanced_buttons1: "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", 
     theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor", 
     theme_advanced_buttons3: "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen", 
     theme_advanced_buttons4: "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak", 
     theme_advanced_toolbar_location: "top", 
     theme_advanced_toolbar_align: "left", 
     theme_advanced_statusbar_location: "bottom", 
     theme_advanced_resizing: true, 

     // Example content CSS (should be your site CSS) 
     content_css: "css/content.css", 

     // Drop lists for link/image/media/template dialogs 
     template_external_list_url: "lists/template_list.js", 
     external_link_list_url: "lists/link_list.js", 
     external_image_list_url: "lists/image_list.js", 
     media_external_list_url: "lists/media_list.js", 

     // Replace values for the template plugin 
     template_replace_values: { 
      username: "Some User", 
      staffid: "991234" 
     }, 

     //setup:'tmceWordcount' 
     setup: function(ed) { 

      ed.onKeyUp.add(function(ed, e) { 

       //Following does not work correctly 
       //var strip = (tinyMCE.activeEditor.getContent()).replace(/(<([^>]+)>)/ig,""); 

       //Neither does the code below 
       var strip = (tinyMCE.activeEditor.getContent()).replace(/<[^>]+>/g, ""); 


       var text = strip.split(' ').length + " Words, " + strip.length + " Characters" 
       tinymce.DOM.setHTML(tinymce.DOM.get(tinyMCE.activeEditor.id + '_path_row'), text); 
      }); 
     } 

    }); 
}); 

Oto mój przykład. Wpisuję pierwsze słowo jako: Me Po wpisaniu pierwszego słowa poprawnie wyświetlają się znaki i słowa. Ale gdy tylko uderzę w spację, aby wprowadzić następne słowo, pokazuje ono 8 znaków. Jak? IMO, w tym także znaczniki HTML. Kod HTML jest następująca dla powyższego wprowadzonego tekstu:

<p>Me&nbsp;</p> 

Spodziewam się 1 wyjście Słowo i 3 znaków (2 znaków + 1 spacja). Ale pokazuje mi 5 kolejnych postaci. Jak to się dzieje? & jak mogę to zatrzymać? Jeśli wpiszesz następne słowo, zaraz po rozpoczęciu pisania pojawi się poprawna liczba znaków. Ale kiedy ponownie trafisz w kosmos, dodajesz więcej postaci. Problem ten wydaje się występować zawsze po naciśnięciu przycisków Enter. Jak to może zostać naprawione?

Odpowiedz

1

Jeśli chcesz zrobić coś takiego, trzeba dodać funkcję jQuery tak: http://jsfiddle.net/uA9Jx/

jQuery.fn.stripTags = function() { 
     return this.replaceWith(this.text().replace(/<\/?[^>]+>/gi, '')); 
}; 

Załóżmy jest to Twoja HTML:

<textarea id='bar'>This is <b>bold</b> and this is <i>italic</i>.</textarea>

A potem zrobić:

$("#bar").stripTags();

co spowoduje:

This is bold and this is italic.

Albo ten kod działa podobnie: http://jsfiddle.net/cwbMX/

$("#bar").html($("#bar").text().replace(/<\/?[^>]+>/gi, '')); 
+0

Cześć, dzięki za kod. Próbowałem obu kodów wymienionych powyżej i ten sam problem utrzymuje się. Z jakiegoś dziwnego powodu nie usuwa on tagów HTML. Rozważa je. Powinien pobrać tekst w momencie wprowadzenia, ale rozważa źródło HTML. Zastosowałem go nawet dwukrotnie, ale wciąż z tym samym efektem. Jeśli spróbujesz tego kodu, zobaczysz, że jego ostrzeżenie wyśle ​​kod HTML nawet po tym, jak zastosowałem funkcję replace: 'var strip = (tinyMCE.activeEditor.getContent()).replace (/ <\/?[^>] +>/gi, ''); \t \t \t \t \t \t alert (strip.replace (/ <\/?[^>] +>/gi, '')); 'Wszelkie pomysły jak to naprawić? – Devner

0

Internetowa pamięć jest nieskończona, a większość wątków na tinymce nie działa w wersji 4 Moje rozwiązanie jest proste: chang e wtyczka wordcount w następujący sposób: } return e + 'Chars:' + a.getContent(). length} i zmień kod onkeyup przez wyeliminowanie kodu dostępu 32 a.on ("keyup", function (a) {b()})}, 0)}), działa jak czar wkładając te wyniki do instancji TinyMCE potrzebuje wtyczki rzeczywiście, ale to drobna modyfikacja przykład plugin

0

zaledwie kilku wskazówek dla tych, którzy chcą pracować z kilkoma instancjami TineMCE.

...  
setup: function(e){ 
     //I think in this case 'change' is better than 'keyup' because the user can click a button and change the code without typing. 
     e.on('change', function(e){ 
       var len = tinymce.activeEditor.getContent().length; //Here we get the length of the content with the html tags. 
         var inputName  = tinymce.activeEditor.id; //here we get the name of the input or textarea. 

         var obj = $('input[name="'+inputName+'"]').parent();//Here we set a jquery object reference. 

         var maxLen = 400; 
         obj.find('.char-count').html(len); //Here we set a span tag with the length. 

         if(len > maxLen){ 
          obj.find('.char-count').css('color','#fa8072'); //If the len is bigger than maxLen. 
         }else{ 
          obj.find('.char-count').css('color','#808080'); //If the len is lower than maxLen. 
         } 
        }); 
       } 
Powiązane problemy