扩展jQuery函数时如何更改参数

时间:2016-04-12 07:04:02

标签: jquery

当我修改html()的参数时,我得到一个我无法弄清楚的错误。

在此示例中,我只是stringifying,然后是parsing,它会导致同样的错误:

(function($) {
    var oldhtml = $.fn.html;
    $.fn.html = function() {
        var args = JSON.stringify(arguments);
        // do some stuff with args
        args = JSON.parse(args);
        var ret = oldhtml.apply(this, args);
        return ret;
    };
})(jQuery);

出现此错误:

  

jquery-ui.min.js:5 Uncaught TypeError:e(...)。addClass(...)。html(...)。appendTo不是函数

1 个答案:

答案 0 :(得分:1)

问题是你使用JSON.stringify(),因为arguments不是一个Array对象,它会像带有索引的键/值对象一样解析它。因此,解析后args不再是数组,而是一个对象。

所以一个可能的解决方案是将参数转换为数组,然后将其字符串化



(function($) {
  var oldhtml = $.fn.html;
  $.fn.html = function() {

    $('#args-strinfigy').text(JSON.stringify(arguments)); //see this

    var args = JSON.stringify([].slice.call(arguments)); //or JSON.stringify(Array.from(arguments))
    // do some stuff with args
    args = JSON.parse(args);
    var ret = oldhtml.apply(this, args);
    return ret;
  };
})(jQuery);

$('div').html('asdfasd').appendTo('body')

div {
  background-color: grey;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p></p>
<div>
</div>

<pre id="args-strinfigy"></pre>
&#13;
&#13;
&#13;