2016-04-12 17 views
-1

html() argümanlarını değiştirdiğimde, anlayamadığım bir hata alıyorum. Bu örnekte jQuery işlevini genişletirken argümanların nasıl değiştirileceği

Sadece stringifying ve sonra parsing olduğum ve aynı hataya neden: çünkü sorun JSON.stringify() kullanımınız

jquery-ui.min.js:5 Uncaught TypeError: e(...).addClass(...).html(...).appendTo is not a function

+0

hata gösterdiğin koduna tamamen ilgisiz görünüyor stringify. Test durumum bu hatayı almaz: https://jsfiddle.net/06mjdfgu/. Çalışmıyor çünkü 'args' bir nesne ve' argümanlar' bir dizi olmalıdır. Aynı verilere, tekrar sardığınız aynı işleve geri vermeden önce bağlayıcı/ayrıştırma noktasından bile emin değilim. –

+0

yea, html() ... – ChrisAdmin

+0

... 'u aramanız gerekecek mi? $ ('div'). html ('foo'); ' –

cevap

1

geçerli:

(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); 

bu hatayı alınıyor arguments bir Array nesnesi değildir, dizinlere sahip bir anahtar/değer nesnesi gibi ayrıştırır. Böylece, args ayrıştırıldıktan sonra artık bir dizi değil, bunun yerine bir nesnedir.

Yani olası bir çözüm bir diziye argümanlar dönüştürmek olduğunu, o zaman

(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>

+0

Aferin. sorunumu tamamen düzeltti. Neden # args-stringify gerek? sadece bir değişken kullanmak mümkün mü? – ChrisAdmin

+0

@ user975033 sadece neler olduğunu göstermek için onu kaldırabilirsiniz –

İlgili konular