0

私はCKEditorを使用しています( CKFinderとともに)。データベースに保存する前に、レンダリングされたコンテンツを検証する必要があります。

CKEditor によってレンダリングされたコンテンツが空白の場合、検証違反メッセージが表示されます。これはサーバー側で簡単に実行できますが、ユーザーが空白と改行のみを入力した場合は、それを削除し、検証ルールに違反するコンテンツをデータベースに挿入しないでください。

CKEditor は HTML をレンダリングするため、サーバー側で (Java に関して) のような関数を単純に使用することはできません。String.trim()いくつかの空白と改行文字のみを入力すると、レンダリングされる HTML は次のようになります。

<p>            
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   
</p>

<p>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p>

これは実際には、サーバー側の機能を使用するだけではトリミングできない空白と改行文字を表しています。では、そのような状況で検証を実行する方法は何ですか?

4

2 に答える 2

0

私は巨大なオタクで、これについて小さな提案をしました。基本的に、CKEditor の値を取得し、それを使い捨ての DIV に吐き出し、そのコンテンツの長さを jQuery で取得し、それを 0 と比較します。

CKFinder と使い捨てに contenteditable DIV を同時に使用するjsfiddleの例を作成しました。これが JavaScript です。理解していただければ幸いです。そうでない場合は、質問してください。ねじれたコードを明確にしようとします。

$(function() {
    // this just keeps track of the contenteditable
    // replace with your submit or whatever event
    $('body').on('focus', '[contenteditable]', 
            function() {
                var $this = $(this);
                $this.data('before', $this.html());
                return $this;
            }).on('blur keyup paste', '[contenteditable]', function() {
                var $this = $(this);
                if ($this.data('before') !== $this.html()) {
                    $this.data('before', $this.html());
                    $this.trigger('change');
                }
                return $this;
            });
    $('body').on('change', function() {
       validate();
    });

    // This actually validates the string as 0-rendering or not.
    function validate() {

        // Replace this text getter with getting the CKE content
        // Then vomit it into a DIV like check and then get it again.
        // just keep #check invisible with CSS.
        var text = $('#check').text();
        var l = text.trim().length;

        // if length is 0, it renders as whitespace only
        // I show a message to whine about that
        if (l === 0) {
            $('#aaa').text("DOES NOT PASS");    
        }
        else {
             $('#aaa').text("PASS");   
        }   
    }
    validate();
});
于 2013-10-23T11:17:07.847 に答える