I found the solution to this mysterious challenge. Most of the time the limitation that you're having is related to a Dynamic HTML, and the function is always going to return you something like this:

This means that the object is not created and jQuery cannot find it then you need to apply something like that is explained here:
https://stackoverflow.com/a/15090957/2889347
The code must be edited and will look like this:
$(function () {
$(document.body).on('mouseenter touchstart mouseleave touchend', '[rel=tooltip]', function () {
var targets = $('[rel=tooltip]'),
target = false,
tooltip = false,
title = false;
targets.on('mouseenter touchstart', function () {
target = $(this);
tip = target.attr('title');
tooltip = $('<div id="tooltip"></div>');
if (!tip || tip == '')
return false;
target.removeAttr('title');
tooltip.css('opacity', 0)
.html(tip)
.appendTo('body');
var init_tooltip = function () {
if ($(window).width() < tooltip.outerWidth() * 1.5)
tooltip.css('max-width', $(window).width() / 2);
else
tooltip.css('max-width', 340);
var pos_left = target.offset().left + (target.outerWidth() / 2) - (tooltip.outerWidth() / 2),
pos_top = target.offset().top - tooltip.outerHeight() - 20;
if (pos_left < 0) {
pos_left = target.offset().left + target.outerWidth() / 2 - 20;
tooltip.addClass('left');
}
else
tooltip.removeClass('left');
if (pos_left + tooltip.outerWidth() > $(window).width()) {
pos_left = target.offset().left - tooltip.outerWidth() + target.outerWidth() / 2 + 20;
tooltip.addClass('right');
}
else
tooltip.removeClass('right');
if (pos_top < 0) {
var pos_top = target.offset().top + target.outerHeight();
tooltip.addClass('top');
}
else
tooltip.removeClass('top');
tooltip.css({ left: pos_left, top: pos_top })
.animate({ top: '+=10', opacity: 1 }, 50);
};
init_tooltip();
$(window).resize(init_tooltip);
var remove_tooltip = function () {
tooltip.animate({ top: '-=10', opacity: 0 }, 50, function () {
$(this).remove();
});
target.attr('title', tip);
};
target.on('mouseleave touchend', remove_tooltip);
tooltip.on('click', remove_tooltip);
});
});
});
The trick is on the:
$(document.body).on('mouseenter touchstart mouseleave touchend', '[rel=tooltip]', function () { //... });
This part of the code it would allow you to call it when you the code is fully loaded on the body and it will track the pattern that you want to execute.
Besides, here are some screenshots of the tooltip working as expected in Android.

Also, you can add this additional events:
UPDATE 2017-07-25:
I had some troubles with certain WebViews and I upgraded the code to the following one, which should be fully functional:
$(function() {
var target = false,
tooltip = false,
title = false;
$(document.body).on('click tap', function (e) {
if (event.target.nodeName !== "ABBR" && tooltip != false) {
remove_tooltip();
}
});
var remove_tooltip = function()
{
tooltip.animate( { top: '-=10', opacity: 0 }, 50, function()
{
$( this ).remove();
});
target.attr( 'title', tip );
};
$(document.body).on('click tap', '[rel=tooltip]', function () {
target = $( this );
tip = target.attr( 'title' );
tooltip = $( '<div id="tooltip"></div>' );
if( !tip || tip == '' )
return false;
target.removeAttr( 'title' );
tooltip.css( 'opacity', 0 )
.html( tip )
.appendTo( 'body' );
var init_tooltip = function()
{
if( $( window ).width() < tooltip.outerWidth() * 1.5 )
tooltip.css( 'max-width', $( window ).width() / 2 );
else
tooltip.css( 'max-width', 340 );
var pos_left = target.offset().left + ( target.outerWidth() / 2 ) - ( tooltip.outerWidth() / 2 ),
pos_top = target.offset().top - tooltip.outerHeight() - 20;
if( pos_left < 0 )
{
pos_left = target.offset().left + target.outerWidth() / 2 - 20;
tooltip.addClass( 'left' );
}
else
tooltip.removeClass( 'left' );
if( pos_left + tooltip.outerWidth() > $( window ).width() )
{
pos_left = target.offset().left - tooltip.outerWidth() + target.outerWidth() / 2 + 20;
tooltip.addClass( 'right' );
}
else
tooltip.removeClass( 'right' );
if( pos_top < 0 )
{
var pos_top = target.offset().top + target.outerHeight();
tooltip.addClass( 'top' );
}
else
tooltip.removeClass( 'top' );
tooltip.css( { left: pos_left, top: pos_top } )
.animate( { top: '+=10', opacity: 1 }, 50 );
};
init_tooltip();
$( window ).resize( init_tooltip );
tooltip.bind( 'click tap', remove_tooltip );
});
});
I made three important changes:
I search for each and every click/tap on the whole site and I apply the removed function only when the ABBR is selected and the Tooltip is defined.
$(document.body).on('click tap', function (e) { });
I tracked the click/tap on the ABBRs and I displayed the Tooltip:
$(document.body).on('click tap', '[rel=tooltip]', function () { });
I make the remove function public. Also, I checked if the Tooltip is initialized.
You could ask me: why did you replace all mouse events by clicks or taps?
Generally, in Mobile Development you don't track Mouse events such such as: mouseenter, mouseleave, etc. Because people hardly ever use a mouse for their daily activities, we use more our fingers with taps.