$ (this) внутри $ ('# кое-что'). css ({...}) - PullRequest
3 голосов
/ 12 марта 2012

Я пытался применить css с jquery к элементу div, но он не принимает параметр $ (this).Интересно, почему я не могу использовать $ (this) в качестве ссылки на элемент div.

blabla.css({
'top': $(window).width()/2-$(this).width()/2+'px', 
'left': $(window).width()/2-$(this).width()/2+'px'  
});

ОШИБКА: Uncaught TypeError: У объекта # нет метода 'width'

Заранее спасибо..

ps: я знаю, что могу использовать прямой вызов id внутри $(), но я ожидал, что this сработает.

Ответы [ 4 ]

2 голосов
/ 12 марта 2012

Обратите внимание, что вы не выполняете обратный вызов, вы передаете объект .css.Таким образом, this относится не к blabla - элементу, а к текущему контексту, определенному при вызове функции, которая содержит этот код (и это может измениться).Этот контекст не имеет .width, и тогда вы получите ошибку.

Вы должны будете явно указать ширину, как в blabla.width()

1 голос
/ 12 марта 2012

, если $(this) равно blabla, почему бы не использовать blabla.width() вместо $(this).width()?

1 голос
/ 12 марта 2012

Вы, вероятно, пытаетесь

$("#blabla").css('top',function(){
   alert($(this).width());
 });​
0 голосов
/ 14 февраля 2013

Мне тоже нужно решение для этого.Я хотел использовать jQuery для центрирования плавающих элементов.Я создал эту функцию, которая называется onload и при изменении размера окна:

$("div[class~='floatCenter']").each(function () {
    var elementWidth = $(this).outerWidth() / 2;
    var parentWidth = $(this).parent().outerWidth() / 2;
    var marginPixels = parentWidth - elementWidth;
    $(this).css("margin-left", marginPixels + "px");
});

Я закончил тем, что пошел другим путем, центрируя мой div с помощью CSS, но концепция использования $(this) остается прежней.

...