Выберите текущий элемент - PullRequest
4 голосов
/ 05 февраля 2012

Я хотел бы найти фокусированный на данный момент элемент во всем документе. Я попытался использовать псевдокласс :focus, представленный в jQuery 1.6:

$(document).find(":focus")

Но $(document).find(":focus").length всегда возвращает 0

Ответы [ 2 ]

11 голосов
/ 05 февраля 2012

Вы должны иметь возможность использовать activeElement свойство document:

var focus = $(document.activeElement);

Если вы посмотрите документацию jQuery для :focus это делает это совершенно ясно:

Если вы ищете фокусированный в данный момент элемент, $ (document.activeElement) найдет его без необходимости поиска по всему дереву DOM.*

Стоит отметить, что если ни один элемент в данный момент не имеет фокуса, activeElement будет ссылаться на body.

0 голосов
/ 05 февраля 2012

Как и в случае других селекторов псевдоклассов (те, которые начинаются с ":"), рекомендуется предшествовать: фокус с именем тега или каким-либо другим селектором;в противном случае подразумевается универсальный селектор ("*").Другими словами, голое $(':focus') эквивалентно $('*:focus').

Если вы хотите альтернативу $( document.activeElement ), которая будет извлекать текущий элемент, имеющий фокус, который вы можете использовать:

$(document).delegate( "*", "focus blur", function( event ) {
    var elem = $( this );
    //  here use elem.is( ":focus" ) which is your element that has focus
   //for example  : 
    elem.toggleClass( "focused", elem.is( ":focus" ) );
});
...