Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как передать элемент в переменную из функции (https://javascript.ru/forum/jquery/18714-kak-peredat-ehlement-v-peremennuyu-iz-funkcii.html)

kichSman 12.07.2011 21:26

Как передать элемент в переменную из функции
 
Сразу извиняюсь за терминологию, просто с JQ недавно общаюсь.

Собственно, вопрос в следующем. Написан плагин, следующей конструкции:
(function( $ ){
	var fun = {
		create : function(){
			return this.each(function(){
				var $this = $(this);
				$this.wrap('<div title="dasd"></div>');
				var $box = $this.parent();//вот нужный элемент
				$box.append('<span>f</span>');		
				return $box;
			});
		},
	}

	$.fn.inputX = function(comm) {return fun[comm].apply(this, Array.prototype.slice.call( arguments, 1 ));}
})( jQuery );

Никак не могу при вызове плагина, передать в переменную элемент созданный плагином, см. листинг ниже
/*собственн ТУТ то и возникает вопрос, как переменной inX передать элемент плагина $box */
var inX = $('#law input').inputX('create');
/*чтобы потом можно было обращаться, например, так*/
inX.css('background', '#000')

Или это не возможно, просто с JS мало дружу?

Заранее благодарен.

Sweet 12.07.2011 21:59

Метод .each не модифицирует набор, так что возвращать $box бесполезно. Сделай по-другому.

kichSman 12.07.2011 22:14

Цитата:

Сообщение от Sweet (Сообщение 112974)
Метод .each не модифицирует набор, так что возвращать $box бесполезно. Сделай по-другому.

Огромное спасибо, действительно, чаще всего ошибки возникают из-за невнимательности чтения мануала, выходом явился способ вынесения переменной за функцию инициализации.

ваый 12.07.2011 22:16

Вообще говоря, то, что ты хочешь сделать неправильно, потому что плагин должен возвращать набор matched elements, чтобы можно было делать цепочки вызовов. Поэтому писать плагин, который почему-то возвращает что-то еще - неверно концептуально.

Но в данном случае если сильно хочется, можно конечно извратиться. Скажем:
create : function() {
    this.each(function(){
        var $this = $(this);
        $this.wrap('<div title="dasd"></div>');
        var $box = $this.parent();//вот нужный элемент
        $box.append('<span>f</span>');
    });
    return this.parent();
}


Часовой пояс GMT +3, время: 17:26.