Я использую jQuery-plugin qTip. Какая команда уничтожить все всплывающие подсказки на моей странице?
Я пробовал:
$('.option img[title], span.taxonomy-image-link-alter img[title]').qtip("destroy");
Но это не сработало... Благодаря
Я использую jQuery-plugin qTip. Какая команда уничтожить все всплывающие подсказки на моей странице?
Я пробовал:
$('.option img[title], span.taxonomy-image-link-alter img[title]').qtip("destroy");
Но это не сработало... Благодаря
Я решил с помощью $(".qtip").remove();
qTip2 - это более новая версия этого script, но я хотел бы отметить 1 вещь.
$(".qtip").remove();
Этот фрагмент кода не уничтожал все всплывающие подсказки - он просто удалял их контейнеры. Все обработчики и события, связанные с объектами, которые вызывают всплывающие подсказки, все еще доступны в памяти браузера.
В qTip, чтобы удалить всплывающую подсказку и ее обработчик, вам придется использовать:
$(mytooltip).qtip("destroy");
или
$(mytooltip).qtip('api').destroy();
В qTip2, однако, используя это:
$(mytooltip).remove();
Автоматически вызывать всплывающую подсказку api и destroy и ее обработчики полностью.
$('.qtip').each(function(){
$(this).data('qtip').destroy();
})
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");
}
Выглядит багги. Мне повезло с этим, но он не восстанавливает исходные заголовки. Я подозреваю, что destroy
не делает этого...
$('span.taxonomy-image-link-alter img')
.filter(function(){return $(this).data('qtip');})
.qtip('destroy');
Кажется, вы не можете вызывать destroy
для элементов без qTip - он не прерывается молча, но выдает исключение и останавливает цикл.
Я испытал, что api-call
$(selector).qtip('destroy')
не удаляет все qtip-данные надежно, особенно при использовании нескольких qtips одновременно.
В моем случае мне пришлось удалить видимый qtip и успешно использовать это обходное решение:
$(selector).removeData('qtip');
$('.qtip :visible').remove();
if ( jQuery( '.qtip' ).length > 0 )
{
jQuery( "#IdElement").qtip("destroy");
}
Ни один из этих ответов не помог мне.
В моем случае у меня был qtip на элементе с кнопкой закрытия. Кнопка закрытия не удаляется элемент, так что не было никаких ссылок точки, чтобы удалить QTIP после того, как элемент был удален.
Я думал, что $('.qtip:visible').remove()
будет работать, но он каким-то образом удалил все qtips на странице, а не тот, который мне нужно удалить.
Я заметил, что для видимого qtip задан класс qtip-active
, поэтому для меня это было:
$('.qtip-active').remove();
Возможно, немного поздно, но у меня возникли проблемы с загрузкой памяти и страницы, когда вызов 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 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