Определите $(this) в jQuery
что лучший способ узнать, что $(this)
в настоящее время равно в jQuery?
alert(this);
не очень поможет.
причина, по которой я спрашиваю, заключается в том, что часть кода в настоящее время не делает то, что она должна делать после того, как я переместил код в функцию.
выдержка ниже теперь находится в функции, и $(this) теперь, похоже, относится к DOMWindow.
if($(this).hasClass('open'))
{
alert('I should be closed');
$(this).removeClass('open').addClass('closed');
$(this).parents('article').css('border', '1px solid red').animate({'width': '212px'}, 100, "linear", function() {
run_masonry();
});
}
else
{
alert('I should be open');
$(this).removeClass('closed').addClass('open');
$(this).parents('article').css('border', '1px solid blue').animate({'width': '646px'}, 100, "linear", function() {
run_masonry();
});
}
как сохранить его как $(this), являющийся оригинальным элементом щелчка?
4 ответов
что лучший способ узнать, что
$(this)
в настоящее время равно в jQuery?
, войдя в консоль вашего любимого инструмента отладки javascript (например,Палий или панель инструментов разработчика Chrome, например):
console.log($(this));
который вернет объект, обернутый jQuery. Если вы хотите узнать больше о собственном объекте, вы можете использовать:
console.log(this);
если вы занимаетесь разработкой javascript, вы должны использовать инструмент отладки JavaScript. alert
- это не такой инструмент.
теперь, когда вы обновили свой вопрос с некоторым источником кода, кажется, что вы используете $(this)
в глобальной области видимости. Тогда это будет относиться к
при перемещении кода в функцию обычно изменяется область действия кода. Таким образом," это "больше не будет относиться к исходному объекту, а скорее к новому (или глобальному объекту" окно"). Если вы покажете нам свой код, мы сможем определить проблему.
Я подозреваю, что вы делаете что-то вроде этого:
$('#element').click(function() {
clickHandler();
});
В этом случае clickHandler
будет вызываться в контексте объекта window. Чтобы сохранить правильный контекст, просто измените код на:
$('#element').click(clickHandler);
Если вы хотите проверить, что передается, вы можете использовать мою версию или версию jquerylog Принцхорна. Это должно помочь вам определить шаг за шагом, что происходит:
http://www.jquerylog.com / https://github.com/fmsf/jQueryLog
как:
$("#foo").parents(".t1").next().prev().parent().find(".t2:last .t4:last").text("test");
вы получите такой вывод (который идентифицирует div на каждом шаге:
$('#foo'): [<div id="foo" class="t3"></div>]
parents('.t1'): [ <div class="t1">…</div> ]
next(undefined): [ <div class="t1">…</div> ]
prev(undefined): [ <div class="t1">…</div> ]
parent(undefined): [ <body>…</body> ]
find('.t2:last .t4:last'): [<div class="t4">teste</div>]