J'ai aimé l'approche utilisée par Joel S, mais j'aime également la simplicité de document.activeElement
. J'ai utilisé jQuery et combiné les deux. Les anciens navigateurs qui ne supportent pas document.activeElement
utilisera jQuery.data()
pour stocker la valeur de "hasFocus". Les navigateurs plus récents utiliseront document.activeElement
. Je suppose que document.activeElement
aura de meilleures performances.
(function($) {
var settings;
$.fn.focusTracker = function(options) {
settings = $.extend({}, $.focusTracker.defaults, options);
if (!document.activeElement) {
this.each(function() {
var $this = $(this).data('hasFocus', false);
$this.focus(function(event) {
$this.data('hasFocus', true);
});
$this.blur(function(event) {
$this.data('hasFocus', false);
});
});
}
return this;
};
$.fn.hasFocus = function() {
if (this.length === 0) { return false; }
if (document.activeElement) {
return this.get(0) === document.activeElement;
}
return this.data('hasFocus');
};
$.focusTracker = {
defaults: {
context: 'body'
},
focusedElement: function(context) {
var focused;
if (!context) { context = settings.context; }
if (document.activeElement) {
if ($(document.activeElement).closest(context).length > 0) {
focused = document.activeElement;
}
} else {
$(':visible:enabled', context).each(function() {
if ($(this).data('hasFocus')) {
focused = this;
return false;
}
});
}
return $(focused);
}
};
})(jQuery);
4 votes
Voici un bookmarklet qui console.log l'élément avec focus : github.com/lingtalfi/where-is-focus-bookmarklet
1 votes
Vous pouvez utiliser
find-focused-element
paquet : npmjs.com/package/find-focused-element1 votes
Pour moi, le bookmarklet que Ling a mentionné ne fonctionne pas.
3 votes
Voir un bon exemple de
document.activeElement
utilisé ici : stackoverflow.com/a/64176168/1599699