Функция выбора JQuery $ (this) и ограничения - PullRequest
9 голосов
/ 10 апреля 2011

Мне нужна помощь в понимании $ (это).Можно ли сузить фокус «этого» в скобках или «это» исключает использование каких-либо других атрибутов?

Например: я не понимаю, почему этот код:

$(this).children("div")

нельзя переписать так:

$(this +" div")

без необходимости прибегать к чему-либокак:

$('#'+$(this).attr("id")+" div")

Кроме того, можете ли вы указать мне на «это» в документации JQuery?Трудно использовать «это» в качестве поискового термина по понятным причинам.

Ответы [ 5 ]

17 голосов
/ 10 апреля 2011

this это не "вещь" jQuery, а базовый JavaScript . Его нельзя переписать так, как в примерах, потому что это объект, в частности элемент DOM или объект jQuery (в зависимости от того, в каком контексте вы находитесь). Так что, если вы сделали это:

 $(this + " div")

То, что вы действительно делаете, это вызов .toString() для this для объединения строк, в результате чего:

 $("[object Object] div")

.... который не является допустимым селектором.

Что касается дальнейшего чтения, я считаю, эта статья продолжает оставаться одной из лучших ссылок / ресурсов, чтобы узнать, что означает this (ключевое слово context).


За запросы на комментарии, некоторые примеры того, что this находится в разных местах:

  • Обработчики событий, например: $("selector").click(function() { alert(this); });
    • this относится к элементу DOM, на котором запускается обработчик событий.
  • Внутри плагина jQuery, например: $.fn.myPlugin = function() { alert(this); });
    • this - это объект jQuery, для которого был вызван / подключен плагин, например: $("selector").myPlugin();, this - это $("selector") объект jQuery.
  • Внутри любой универсальной функции, например: function myFunc() { alert(this); };
    • this - это контекст, в котором вы находитесь, будь то объект или что-то еще, несколько примеров:
    • $("selector").click(myFunc); - this - это элемент DOM, как и выше
    • $("selector").click(function() { myFunc(); }); - this - глобальный контент, window
    • myFunc.call(whatThisIs, arg1, arg2); - this is whatThisIs
6 голосов
/ 10 апреля 2011

Использование .find()

$( this ).find( 'div' )

Или используйте параметр context для jQuery( selector, context ) (внутренне, в любом случае, он просто вызывает find ...)

$( 'div', this )
0 голосов
/ 10 апреля 2011

Во-первых, вы должны понять, что такое это , это зависит от контекста.Когда вы вызываете $ function, он возвращает объект jQuery.

$(this).children("div")

Это означает, что от конкретного объекта получите всех детей, см. Ссылку ниже: http://jsfiddle.net/vietean/f2Yrg/

0 голосов
/ 10 апреля 2011

Вы можете взглянуть на это: http://api.jquery.com/each/

В основном this - это элемент DOM, на который ссылается обратный вызов. Вы не можете сделать $(this + " div"), потому что вы добавляете строку к элементу. Сначала вам нужно получить идентификатор, как в третьем фрагменте кода.

Кстати, $(this).children("div") - это не то же самое, что $('#'+$(this).attr("id")+" div")

Во-первых, this может не иметь идентификатора, в этом случае второй способ не будет работать вообще. И даже если у него есть идентификатор, этот второй код действительно $(this).find("div"). Если вы хотите детей только вы должны сделать:

$('#'+$(this).attr("id") + " > div")
0 голосов
/ 10 апреля 2011

this не является строкой, представляющей селектор CSS (такой как div, #my_id или .my_class).
При передаче this в качестве аргумента функции jQuery он возвращает объект jQuery, основанный на текущем элементе (на что это ссылается), поэтому вы не можете использовать что-то вроде $(this + selector).

...