2015-03-02 4 views
0

Я хочу проверить, существует ли объект jQuery в DOM (с Internet Explorer). Я попробовал этот код:Как проверить, существует ли объект JQuery в DOM?

observeEditor = function(editor) { 
    function update_position() { 
     console.log("update_position"); 
     var $editor = jQuery(editor); 
     if (jQuery(document).find($editor).length > 0) { 
      // call our function 
      setTimeout(update_position, 250); 
     } 
    } 
    setTimeout(update_position, 250); 
}; 

Но проблема в том, что даже после того, как я закрываю редактор (он не существует в DOM), я все еще получаю эту console.log каждые 250 мс. Как проверить, существует ли элемент в DOM? Я получаю переменную editor в качестве параметра.

Обратите внимание, что редактор также может быть внутри .

+4

Это звучит как излишество. Зачем тебе это нужно? Я уверен, что это лучший способ сделать это, не делая запрос DOM 4 раза в секунду. –

+0

@RoryMcCrossan Я пытался использовать 'MutationObserver', но я не могу заставить его работать в Internet Explorer. У нас такая же функция для Chrome, Firefox и Safari, и она работает с 'MutationObserver'. Но поскольку он не работает в Internet Explorer, я запускаю эту функцию каждые 250 мс. – Uri

ответ

0

Я нашел решение, оно не идеально, но оно работает. Я дал каждому редактору уникальный атрибут данных:

if (($editor.length === 1) && (typeof($editor.attr('data-editor-id')) === 'undefined')) { 
    $editor.attr('data-editor-id', Math.floor((Math.random() * 900000000000000) + 100000000000000)); 
} 

А потом я изменил функцию:

observeEditor = function(editor) { 
    var $editor = jQuery(editor); 
    var editor_id = undefined; 
    if (($editor.length === 1) && (!(typeof($editor.attr('data-editor-id')) === 'undefined'))) { 
     editor_id = $editor.attr('data-editor-id'); 
    } 
    function update_position() { 
     console.log("update_position"); 
     if (jQuery(document).find('[data-editor-id="' + editor_id + '"]').length > 0) { 
      // call our function 
      setTimeout(update_position, 100); 
     } 
    } 
    setTimeout(update_position, 100); 
}; 

Кстати, я изменил timout до 100 мс, потому что это слишком медленно с 250.

+0

Кстати, это решение не работает, если редактор находится внутри iframe. Если он находится внутри iframe, мы должны искать его рекурсивно в DOM. – Uri

Смежные вопросы