当我修改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不是函数
答案 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;