Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery plugIn (https://javascript.ru/forum/jquery/21617-jquery-plugin.html)

Nightmare 17.09.2011 20:42

jQuery plugIn
 
Всегда интересовало такое:
(function($) {
  $.fn.test  = function(options) {
    var options = $.extend({
     def: 'def'
    }, options);
    var s = 'test';
  };
})(jQuery);


можно ли вытянуть переменную 's'. Или как-то сделать что бы была "видна" ?

bayrach 18.09.2011 02:38

видна в какой области видимости?

Nightmare 18.09.2011 12:04

$('body').test();
console.log(s); // и получаем 'test'

Sweet 18.09.2011 12:50

Видимо, делать нужно так:
var s = $('body').test();
console.log(s);
Очевидно, что для этого нужно, чтобы метод .test возвращал нужное значение.

ваый 18.09.2011 13:35

Цитата:

Сообщение от Sweet
Видимо, делать нужно так:
var s = $('body').test();
console.log(s);
Очевидно, что для этого нужно, чтобы метод .test возвращал нужное значение.

Нет, конечно. Плагин должен возвращать set of mached elements. Всегда. Если нужны какие-то данные то их всегда можно хранить в data. Или сделать getter типа
var s = $('body').test('options', 's');

Хотя интересный вопрос, как это лучше сделать. Так - мутно:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>

<span>Test</span>
<b>And</b>
<span>Hello</span>

<script>
$.fn.test = function(settings) {
    var options = $.extend({
      color: 'red'
    }, settings);
    
    if (typeof arguments[0] === 'string') {
      return options[arguments[1]];
    }
    
    return this.each(function() {
      $(this).css({color: options.color});
    });
  };
  
$('span').test({color: 'green'});
alert( $('span').test('options', 'color') );
</script>

Sweet 18.09.2011 13:55

Цитата:

Сообщение от ваый
Плагин должен возвращать set of mached elements. Всегда.

Честно, не в курсе хорошего тона в jQuery. Основной мой меседж в том, что не должны переменные появляться волшебным образом.

ваый 18.09.2011 16:26

Цитата:

Сообщение от Sweet (Сообщение 126945)
Честно, не в курсе хорошего тона в jQuery. Основной мой меседж в том, что не должны переменные появляться волшебным образом.

Должен возвращать set of mached elements для того, чтобы можно было делать цепочки вызовов методов.


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