SORU
4 Mart 2009, ÇARŞAMBA


Can'Ekle <script> element t

Kod parçası aşağıda DOM script öğesi eklemez neden herhangi bir fikir?

var code = "<script></script>";
$("#someElement").append(code);

CEVAP
30 AĞUSTOS 2010, PAZARTESİ


İyi Haber şu:

100% işe yarıyor.

Ekle alert('voila!'); gibi kod etiketi içinde bir şey sadece. Sormak isteyebilirsiniz belki . doğru soru ^strong>"Neden ben DOM görmedin mi?".

Karl Swedberg jQuery API site ziyaretçinin yorum için güzel bir açıklama yaptı. Benyoktüm kelimeleri tekrar etmek istiyorum, doğrudan okuyabilirsinizyokburada(Zor yorum orada gezinmek için buldum).

Tüm jQuery ekleme yöntemleri kullanın. domManip bir fonksiyonu dahili işlem elemanları önce temiz ve sonra DOM içine sokuluyor. Şeylerden biri domManip işlev herhangi bir komut çekin. unsurlar eklenecek ve çalıştırmak hakkında bir "rutin evalScript"ile onlara enjekte yerine kalan DOM parçası. O ekler komut ayrı ayrı, onları değerlendirir, ve sonra DOM onları kaldırır.

Nedenlerinden biri, jQuery inanıyorum bu "İzin önlemek için yapar Bu oluşabilir engellendi" hatası Internet Explorer eklerken belirli koşullar altında komut. Ayrıca art arda önler ekleme aynı senaryo değerlendirme/ neden olabilecek ( sorunları) içeren içinde. eklediğiniz elemanı ve sonra DOM hareketli.

Sonraki şey, kötü haber .append() Bir komut dosyası eklemek için işlevini kullanarak, Özet geçeyim o zaman.


Ve Kötü Haber

Kodunuzu debug edemezsin.

Şaka yaptığım yok, olsa bile sen ekle debugger; anahtar kelime arasındaki çizgiyi ayarlamak istediğiniz kesme, olacaksın sonunda elde sadece çağrı yığını nesne görmeden kesme kaynak kodu(bu kelime sadece y Tarayıcı, diğer büyük tarayıcılar bu anahtar kelime atlamak gibi) çalışan bahsetmiyorum bile.

Eğer kodunuzun ne yaptığını tam olarak anlamak, bu küçük bir dezavantaj olabilir. Ama istemezsen, sadece (ya da benim) kod ile yanlış ne olduğunu bulmak için her yere debugger; bir anahtar kelime ekleme sona erecek. Her neyse, alternatif, doğal olarak javascript HTML DOM işleyebilirsiniz unutma.


Geçici çözüm.

Javascript () jQuery HTML DOM işlemek için kullanın

Eğer hata ayıklama yeteneği kaybetmek istemiyorsan eğer, javascript yerli kullanabilirsiniz daha DOM manipülasyon HTML. Örnek:

var script   = document.createElement("script");
script.type  = "text/javascript";
script.src   = "path/to/your/javascript.js";    // use this for linked script
script.text  = "alert('voila!');"               // use this for inline script
document.body.appendChild(script);

Orada eski günlerdeki gibi. Ve işler her nesne için bellekte DOM olsun ya da temizlemek için unutma başvurulan ve artık bellek sızıntıları önlemek için gerekli. Bu kod şeyleri temizlemek için düşünebilirsiniz:

document.body.removechild(document.body.lastChild);
delete UnusedReferencedObjects; // replace UnusedReferencedObject with any object you created in the script you load.

Bu geçici olumsuzluk yanlışlıkla yinelenen bir komut ekleyebilirsiniz, ve bu çok kötü. Buradan biraz sağ eklendikten sonra eklemeden önce bir nesne doğrulama ekleme ve DOM script kaldırarak .append() fonksiyonu taklit edebilirsiniz. Örnek:

function AddScript(url, object){
    if (object != null){
        // add script
        var script   = document.createElement("script");
        script.type  = "text/javascript";
        script.src   = "path/to/your/javascript.js";
        document.body.appendChild(script);

        // remove from the dom
        document.body.removeChild(document.body.lastChild);
        return true;
    } else {
        return false;
    };
};

function DeleteObject(UnusedReferencedObjects) {
    delete UnusedReferencedObjects;
}

Bu şekilde, komut nifak güvenli iken yeteneği ile hata ayıklama komut dosyası ekleyebilirsiniz. Bu sadece bir prototip, bunu olmak istiyorum ne olursa olsun genişletebilirsiniz. Bu yaklaşım kullanarak ve bu çok memnun oldum. Tabii hiç bir WordPress kullanmak .append() bir komut dosyası eklemek için kullanacağım.

Mutlu Kodlama,
Hendra Uzia.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • MrExcite96

    MrExcite96

    17 ŞUBAT 2011