Символы предела/Количества в CKEditor w/JQuery

Я использую CKEditor для своего WYSIWYG-редактора, и я должен контролировать и ограничить счетчик символов, поскольку они вводят, у меня есть сценарий jQuery, который хорошо работает для нормального TextArea

<script type ="text/javascript" language="javascript">
    function limitChars(textid, limit, infodiv) {
        var text = $('.' + textid).val();
        var textlength = text.length;
        if (textlength > limit) {
            $('#' + infodiv).html('You cannot write more then ' + limit + ' characters!');
            $('#' + textid).val(text.substr(0, limit));
            return false;
        }
        else {
            $('#' + infodiv).html('You have ' + (limit - textlength) + ' characters left.');
            return true;
        }
    }

    $(function() {

        $('.comment-1').keyup(function() {
            limitChars('comment-1', 1000, 'charlimitinfo-1');
        })
    });

</script>

Однако это, кажется, не работает на то, когда текстовая область заменяется CKEditor какие-либо идеи?

5
задан dswatik 6 January 2010 в 16:26
поделиться

4 ответа

Если вы можете получить содержимое CKEDITOR, как некоторые другие посты, опишите, у меня есть идеи о том, как получить количество введенных символов. После того, как у вас есть содержимое, скажем,

<b><span class="redText">H</span>ello <span>World!</span></b>

Вы можете установить это на InnerHTML Hidden Div, а затем получить количество символов в Innertext этого Div.

var elem = document.getElementById('hiddenTestDiv');
elem.innerHTML = '<b><span class="redText">H</span>ello <span>World!</span></b>';
var innerText = elem.innerText;  // equals 'Hello World!'
var contentLength = elem.innerText.length; // equals 12

Я бы сказал, что это не идеальное решение (например, просто


в вашем контенте вернется 0 для длины Innerntext), но это может быть достаточно близко для работы для вас. Это своего рода странная ситуация, считающая длину содержания HTML, так как пекка сказала, что такие вещи, как длина , метка открыта для интерпретации.

5
ответ дан 18 December 2019 в 09:50
поделиться

Текстареа является только запасным элементом, и не обновляется вживую с введенным содержимым. Вы должны будете захватить содержимое вашего экземпляра CKEditor. Это определенно возможно.

Ознакомьтесь с подходами в этом вопросе. , которые открывают доступ к содержимому CKEditor при каждом изменении содержимого.

Я вижу большую проблему для вас. Сколько символов в этом коде?:

<b><span class="redText">H</span>ello <span>World!</span></b>

(ответ - я думаю - двенадцать)

или это:

<b>  <p style="font-size: 30px; font-weight: bold"></p>  </b>

(ответ - я думаю - два пробела)

или это:

<hr>

(ответ - я думаю - один, но на самом деле это интерпретация)

это все мыслимые строки, которые появляются при написании и удалении текста в CKEditor.

Предполагая, что вы хотите считать все символы без HTML-тегов, игнорируя дополнительные элементы, такие как изображения или горизонтальные строки, есть strip_tags() функция для JavaScript, которую вы можете использовать для удаления данных.

4
ответ дан 18 December 2019 в 09:50
поделиться

Это делается

BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;

Это обсуждалось до отгрузки свойств. Некоторые народные считали, что это должна быть ошибка компиляции, чтобы избежать двусмысленности.

Вероятно, лучше всего полностью избежать строительства.

-121--4998467-

Вот пример, который может помочь.

Предположим, что при сохранении экземпляра модели необходимо выполнить какое-либо действие. Однако это действие не имеет никакого отношения непосредственно к самой модели или экземпляру модели. Поэтому нет смысла помещать код для вашего действия в метод save () в модели. Это может привести к ненужной связке кода и загромождению. Вместо этого можно создать обработчик сигнала в другом месте приложения (или даже в другом приложении), где он имеет больше смысла.

-121--3560072-

Вы не можете так просто получить содержимое ckeditor, например, с jquery и $ («iframe») .contents ()... , так как ckeditor не готов к запуску кода. Поэтому необходимо связать некоторые функции с событиями, когда экземпляр редактора готов. После этого удалите тэги, обрежьте пробелы от начала и конца и можно начать подсчет:)

    <input type="text" name="count" id="count" />
    <textarea id="ck"></textarea>
    <script type="text/javascript">
    $(document).ready(function()
    {
        var editor = CKEDITOR.replace('ck');
        editor.on("instanceReady", function(){
            this.document.on("keyup", ck_jq);
            this.document.on("paste", ck_jq);
        });

    });

    function ck_jq()
    {
        var len = CKEDITOR.instances['ck'].getData().replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, '').replace(/^\s+|\s+$/g, '');
        $("#count").val(len.length);
    }

    </script>

HTH:)

7
ответ дан 18 December 2019 в 09:50
поделиться

CKEDITOR фактически отображает в качестве iFrame, вы можете получить содержимое от iFrame ( http://simple.procoding.net/ 2008/03 / 21 / How-to-access-iframe-in-jQuery / ), хотя это не будет легко. Я бы вторым @ озабоченность Pekkka о HTML и как вы собираетесь определить счетчик символов.

1
ответ дан 18 December 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: