2016-06-21 10 views
0

Ich schreibe mein eigenes Plugin für Drupal. Ich habe den folgenden Code in der API für die Änderungsereignisse:CKEditor - ändere Inhalt und umgebende HTML-Tags

editor.on('change', function (evt) { 
    console.log(this.getData()); 
    }); 

Damit ich alle Daten in meinem Editor sehen können, wenn geändert. Ich habe meine Inhalte mit benutzerdefinierten HTML-Tags strukturiert (die einige Datenattribute haben). Meine Frage ist, wenn der Benutzer etwas Inhalt schreibt, wie kann ich die nächsten Tags bekommen - und deshalb ein Datenattribut hinzufügen, das es geändert wurde?

Ich brauche auch eine Art Timer/Verzögerung, um das nicht bei jedem Tastendruck auszulösen, nehme ich an?

Antwort

0

Der Code, den Sie angezeigt haben, ist jQuery-Code. Sie haben eine Funktion erstellt, die bei Änderungsereignis im Editor ausgelöst wird. Es wird jedes Mal ausgelöst, wenn der Benutzer etwas im Editor ändert. Um dies zu vermeiden können Sie so etwas wie dies machen:

fügen Sie eine globale Variable im übergeordneten Bereich (vor Ihrer Funktion):

var editorTimer = null; 

dann Ihre Funktion ändern:

if (editorTimer.length) { 
    clearTimeout(editorTimer); 
} 
editorTimer = setTimeout(function() { 
    console.log(this.getData()); 
}, 1000); 

Es wird klar, letzten Timer und warten Sie dann nach jeder Änderung 1000ms (1s), um die interne Funktion auszulösen. Wenn der Benutzer für 1s nichts ändert, wird die Funktion aufgerufen.

Jetzt - Sie müssen Ihre Funktion vorbereiten und ändern Sie die console.log() zu etwas, das funktioniert. Um Tags zu finden, verwenden Sie jQuery Selektoren: http://api.jquery.com/category/selectors/

wie .closes() oder .parents() oder .find() es hängt davon ab, was Sie zu tun bereit sind.

+0

Danke. Ich habe danach getSelection() und getRanges() verwendet, dann habe ich das Attribut auf das Elternelement gesetzt. –

+0

Wenn meine Antwort hilfreich war, bitte stimme sie ab und markiere sie als beantwortet. –