Определите, находится ли экземпляр CKEDITOR внутри определенного контейнера DOM - PullRequest
1 голос
/ 10 ноября 2011

Я использую следующий цикл для привязки действия к событию focus в каждом экземпляре CKEDITOR:

for (var i in CKEDITOR.instances) {
    CKEDITOR.instances[i].on('focus', function() {
        my_custom_function(this.name);
    });
}

Я хочу изменить это так, чтобы он работал только на экземплярах CKEDITOR, которые находятся внутри определенного элемента DOM. Например, используя нотацию jquery, элемент DOM может быть:

$("#container")

Мысли? Спасибо!

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Каждый экземпляр имеет свойство, которое содержит основной узел, где создается CKEditor, поэтому вы можете использовать что-то вроде

var testContainer = $("#container");

for (var i in CKEDITOR.instances) {
    var instance = CKEDITOR.instances[i];
    if ( jQuery.contains( testContainer, instance.container.$ ) )
    {
    instance.on('focus', function() {
        my_custom_function(this.name);
    });
    }
}
0 голосов
/ 01 мая 2019

Я переписал код AlfonsoML, чтобы он работал для одного из моих проектов.

Обратите внимание, что первый аргумент jQuery.contains() должен быть элементом DOM (см. https://api.jquery.com/jQuery.contains/).

Вот мой код:

// Retrieving container DOM object
var domContainer = $("#container")[0];

// Iterating CKEDITOR instances
for (var intanceName in CKEDITOR.instances) {

    // Testing if instance is inside container
    if ( $.contains(domContainer, CKEDITOR.instances[intanceName].container.$ ) ) {

        // Binding with focus event
        CKEDITOR.instances[intanceName].on('focus', function() {

            // Executing custom function with instance name as an argument
            my_custom_function(intanceName);
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...