如何在jQuery中设置单个选项

时间:2019-04-10 14:33:24

标签: jquery plugins prototype settings option

我想为我的jquery插件代码设置单个选项。但是我不能单独设置。我尝试使用“ $ .each”功能。我使用最新版本的jQuery

$.fn.myMethods = function(option) {
  this.each(function() {
    const $item = $(this);
    $item.myMethods.option = $.extend({
      now: 1
    }, option);
  });
  return this;
}

$.fn.resultOfMyMethods = function() {
  this.each(function() {
    const $item = $(this);
    console.log($item.myMethods.option.now)
  });
  return this;
}

$('input').eq(0).myMethods({
  now: 123
});
$('input').eq(1).myMethods({
  now: 456
});

$('input').eq(0).resultOfMyMethods();
$('input').eq(1).resultOfMyMethods();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input/>
<input/>

预期结果

123
456

实际结果

456
456

1 个答案:

答案 0 :(得分:1)

您正在将属性分配给$.fn.myMethods对象,而不是实例。

您可以使用data()存储在单个元素上。

$.fn.myMethods = function(option) {

  const opts = $.extend({
    now: 1
  }, option);

  this.each(function() {
    const $item = $(this);
    $item.data('options', opts); // set on element
  });
  return this;
}

$.fn.resultOfMyMethods = function() {
  this.each(function() {
    const $item = $(this);
    console.log($item.data('options').now);// get from element
  });
  return this;
}

$('input').eq(0).myMethods({
  now: 123
});
$('input').eq(1).myMethods({
  now: 456
});

$('input').eq(0).resultOfMyMethods();// 123
$('input').eq(1).resultOfMyMethods();// 456
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input/>
<input/>