qTip (плагин jQuery), как я могу удалить все qtips на моей странице? - PullRequest
23 голосов
/ 28 апреля 2010

Я использую плагин jquery qTip. Какая команда уничтожить все подсказки на моей странице?

Я пытался:

$('.option img[title], span.taxonomy-image-link-alter img[title]').qtip("destroy");

Но это не сработало ... Спасибо

Ответы [ 10 ]

25 голосов
/ 28 апреля 2010

Я решил с $(".qtip").remove();

18 голосов
/ 20 сентября 2011

qTip2 - более новая версия этого скрипта, но я бы хотел отметить одну вещь.

$(".qtip").remove();

Этот фрагмент кода не уничтожил все всплывающие подсказки - он просто удалил их контейнеры. Все обработчики и события, связанные с объектами, которые вызывали всплывающие подсказки, по-прежнему доступны в памяти браузера.

В qTip, чтобы удалить всплывающую подсказку и ее обработчик, вы должны будете использовать:

$(mytooltip).qtip("destroy");

или

$(mytooltip).qtip('api').destroy(); 

В qTip2, однако, используя это:

$(mytooltip).remove();

Будет автоматически вызывать API и уничтожать всплывающую подсказку и ее обработчики полностью.

16 голосов
/ 11 апреля 2012
$('.qtip').each(function(){
  $(this).data('qtip').destroy();
})
11 голосов
/ 17 сентября 2013

qtip("destroy") глючит (версия 2.1.1) и не все очищает.

Я нашел это как правильное решение:

// don't call destroy if not needed
if (element.data("qtip")) {
    // the 'true' makes the difference
    element.qtip("destroy",true);
    // extra cleanup
    element.removeData("hasqtip");
    element.removeAttr("data-hasqtip");
}
2 голосов
/ 02 сентября 2012

Я испытал, что API-вызов

$(selector).qtip('destroy')

не удаляет все qtip-данные надежно, особенно при использовании нескольких qtip одновременно.

В моем случае мне пришлось удалить видимый qtip и успешно использовать этот обходной путь:

$(selector).removeData('qtip');
$('.qtip :visible').remove();
2 голосов
/ 28 апреля 2010

выглядит глючно. Мне повезло с этим, но он не восстанавливает первоначальные названия. Я подозреваю, что destroy тоже этого не делает ...

$('span.taxonomy-image-link-alter img')
    .filter(function(){return $(this).data('qtip');})
    .qtip('destroy');

Похоже, вы не можете вызвать destroy для элементов без qTip - он не прерывается молча, но вызывает исключение и останавливает цикл.

0 голосов
/ 18 апреля 2018

А как же:

$('[data-hasqtip]').qtip('destroy', true);

Кажется, работает с qTip2 версией 3.0.2.

0 голосов
/ 06 декабря 2013

Может быть немного поздно, но у меня были проблемы с памятью и загрузкой страницы, когда вызов ajax заменяет содержимое страницы, удаляя целевые объекты qtip2 перед уничтожением, поэтому некоторые элементы остаются, даже если цель исчезла.

Исходя из того, что иногда вы хотите очистить все элементы и данные qtips2, независимо от того, существует исходный объект или нет, некоторые элементы всплывающей подсказки остаются на теле, поэтому, когда исходная цель исчезла, простого способа вызовите метод destroy ().

Если вы не делаете это в поисках созданных объектов вместо целей.

jQuery('div[id^="qtip-"]').each(function(){ //search for remaining objects

    _qtip2 = jQuery(this).data("qtip"); //access the data where destroy() exist.

    //if it's a proper qtip2 object then call the destroy method.
    if(_qtip2 != undefined){ 
        // the "true" is for immediate destroy
        _qtip2.destroy(true);
    }
    //if everything went right the data and the remaining objects in the body must be gone.
});

Я использовал JQuery для решения проблемы без конфликтов, но вы можете использовать «$» (символ) вместо JQuery

0 голосов
/ 20 июля 2013

Ни один из этих ответов не помог мне.

В моем случае у меня был qtip для элемента с кнопкой закрытия.Кнопка закрытия удалила элемент, поэтому не было контрольной точки для удаления qtip после удаления элемента.

Я думал, $('.qtip:visible').remove() сработает, но каким-то образом удалил все qtips на странице, ине тот, который я хотел удалить.

Я заметил, что видимому qtip присвоен класс qtip-active, поэтому у меня сработало:

$('.qtip-active').remove();

0 голосов
/ 12 апреля 2012
   if ( jQuery( '.qtip' ).length > 0 )
    {
        jQuery( "#IdElement").qtip("destroy");
    }
...