Skip to content

Tippy Instance

The Tippy instance is an individual tooltip object. It has a bunch of properties and methods that contain information and functionality to manipulate the tooltip programmatically.

Accessing an instance

If you pass an element or virtual element to tippy(), the instance is directly returned:

const button = document.querySelector('button')
const instance = tippy(button)

If you're passing a CSS selector string, NodeList, or an array of elements, then an array of instances get returned (since potentially many instances can be created):

const instances = tippy('.btn') // Array

_tippy property

Both the reference element and the popper element have the instance attached as the _tippy property.

Reference element:

const button = document.querySelector('button')
tippy(button)
const instance = button._tippy

Popper element (parent of tooltip):

const popper = document.querySelector('.tippy-popper')
const instance = popper._tippy

This is especially useful when listening to events on the tooltip and you need to find which reference element it's associated with.

Auto-initialization

If you're using auto-initialization (data-tippy attribute), and you need to access the instance immediately at runtime, make sure you wrap access in setTimeout():

setTimeout(() => {
  const button = document.querySelector('button')
  const instance = button._tippy
})

Shape and properties

instance is a plain object with these properties:

{
  id: 1, // 1 to Infinity, used for `aria-describedby` attribute
  reference: HTMLButtonElement, // <button>
  popper: HTMLDivElement, // <div class="tippy-popper">...</div>
  popperChildren: { // Child elements of the parent popper element
    tooltip: HTMLDivElement, // <div class="tippy-tooltip">...</div>
    content: HTMLDivElement, // <div class="tippy-content">...</div>
    arrow: null | HTMLDivElement, // <div class="tippy-arrow"></div>
    backdrop: null | HTMLDivElement, // <div class="tippy-backdrop"></div>
  },
  popperInstance: null, // Instance is lazily created
  props: { ... }, // Instance props + attribute options merged together
  state: {
    isDestroyed: false, // Has the instance been destroyed?
    isEnabled: true, // Is the tippy enabled (can show or hide)?
    isVisible: false, // Is the tippy currently showing (and not transitioning out)?
    isMounted: false, // Is the tippy currently mounted to the DOM?
    isShown: false, // Is the tippy fully shown after finishing transitioning in?
  },
  // This object also contains methods. You'll learn in the next section.
}