Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 04.02.2015
Сообщений: 37
1

"this" внутри создаваемого объекта

04.04.2017, 02:11. Показов 958. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь создать объект с определенными параметрами и сдвинуть его вниз на длину созданного объекта.

Javascript
1
2
3
4
5
str_length = (function(text){
    return $('<span/>', {html:text})
        .appendTo($('body')
        .css({'margin-top':$(this).css("width")});
})()
Однако $(this) выдает undefined. Конечно же можно разбить задачу на 2 части:

Javascript
1
2
3
4
5
6
str_length = (function(text){
    var obj = $('<span/>', {html:text})
        .appendTo($('body');
    
    obj.css({'margin-left':obj.css("width")});
})()
Но не хотелось бы ради такой ерунды создавать доп.переменную. Можно ли как-то иначе вычислить размер объекта в момент его создания ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2017, 02:11
Ответы с готовыми решениями:

Не инициируется событие FormMouseDown внутри площади динамически создаваемого объекта TLabel
Не инициируется событие FormMouseDown внутри площади динамически создаваемого объекта TLabel....

Смещение создаваемого объекта
Создаю я дочерний объект, после чего пытаюсь поменять ему позицию, меняю, даже в print() выводит,...

Ширина и высота динамически создаваемого объекта
Доброго времени суток! Такая ситуация: есть программа, в ходе работы которой создаются...

Изменить Porperty создаваемого объекта Xlglob
Хочу фоново создать документ - делаю Dim mass(0) Dim oRange,oRange1,oRange2,...

3
2234 / 1280 / 611
Регистрация: 23.08.2015
Сообщений: 3,230
04.04.2017, 21:36 2
Лучший ответ Сообщение было отмечено BART96 как решение

Решение

BART96,
Javascript
1
2
3
4
5
str_length = (function(text){
    return $('<span/>', {html:text})
        .appendTo('body')
        .css({'margin-top':function(){return this.offsetWidth;}});
})('Lorem ipsum dolor sit amet, consectetur <a href="#"> adipisicing</a> elit. Molestiae commodi necessitatibus ea, excepturi non pariatur explicabo placeat quo id? Inventore quaerat quisquam, dolore pariatur ipsum odio dolorem vero qui beatae.');
Добавлено через 6 часов 53 минуты
BART96, Вообще вас не должна смущать доп переменная. Ведь ей присваивается только ссылка на объект, и это никак не влияет на скорость работы скрипта, а вот если вы к примеру напишете так
Javascript
1
.css({'margin-top':function(){return $(this).width()}});
То получается, что вы лишний раз вызовете метод jQuery и сформируете новый объект $(this).

Не до конца понимаю для чего используется такая конструкция не проще ли сделать так?
Javascript
1
2
str_length = $('<span/>', {html:'Тут текст'}).appendTo('body');
str_length.css({'margin-top':str_length.css("width")});
Может быть вы проясните ситуацию?)
1
0 / 0 / 1
Регистрация: 04.02.2015
Сообщений: 37
04.04.2017, 23:19  [ТС] 3
sad67man, огромное спасибо за ответ. В первом случае очень удивился, когда $(this) выдало ошибку. Насколько я понимаю, объект в jQuery передается от одной функции к другой. А значит и $(this) должен постоянно указывать на сам объект. Но почему-то нет ...
Javascript
1
.css({'margin-top':$(this).css("width")}) // error this == undefined
Спасибо за разъяснение второго варианта. Воспользуюсь им
Javascript
1
2
str_length = $('<span/>', {html:'Тут текст'}).appendTo('body');
str_length.css({'margin-top':str_length.css("width")});
А причина убогости кода проста - хотел максимально упростить его, чтоб отвечающим не пришлось тратить время на разбор )
0
2234 / 1280 / 611
Регистрация: 23.08.2015
Сообщений: 3,230
05.04.2017, 14:39 4
BART96, по поводу this. this указывает на объект, являющийся текущим контекстом вызова функции. Проще говоря указывает на объект который вызвал функцию. Соответственно и используется только внутри функции. Для наглядности можно было бы написать такой метод jQuery
Javascript
1
2
3
4
5
6
$.fn.addMargin = function() {
    this.css('margin-top', this.width());
  return this;
}
 
str_length = $('<span/>', {html:'Тут текст'}).appendTo('body').addMargin();
А если вы пытаетесь написать вот так
Javascript
1
.css({'margin-top':$(this).css("width")})
То это будет тоже самое что и
Javascript
1
2
var width = $(this).css("width");
$(selector).css({'margin-top': width })
Возникает вопрос - на что указывает this? Скорее всего this указывает на window.
1
05.04.2017, 14:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2017, 14:39
Помогаю со студенческими работами здесь

Замена класса создаваемого объекта, в зависимости от параметров
Добрый день. Переезжаю в C# c PHP, и уперся в небольшую проблему. Мне нужно создавать объект разных...

Через ComboBox задавать поля для создаваемого объекта
Хочу через комбобокс задавать поля для создаваемого объекта, пытался засунуть объект в комбобокс...

Сократить объявление auto_ptr для вновь создаваемого объекта
Кстати, может кто подскажет... - в 3-й строке примера (std::autoptr...) можно как-то сократить...

Можно ли выбрать класс создаваемого объекта во время выполнения программы?
привет. Появился вопрос. Есть базовый класс &quot;сечение&quot;. От него есть производные классы &quot;труба&quot;,...

Непонятная ошибка при вызове функции от тут же создаваемого объекта
Ошибка появляется в строке 42: #include &quot;list.h&quot; #include &lt;iostream&gt; using namespace std; int...

Объект внутри объекта / метод внутри метода
Салам, братва. Я вроде как новичок в ООП... Не подскажите, что это такое в плане конструкции и где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru