2010-05-07 27 views
9

Bir sayfada tüm <script type="text/html"> etiketlerini seçmeye çalışıyorum. how John Resig does it'a benzer HTML şablonlarını saklamak için <script> etiketlerini kullanıyorum. Nedense, şu jquery seçici için herşeyi seçilmesi gereken görünmüyor:Komut dizileriyle jquery seçici sorunu

$("script[type*=html]").each(function() { 
    alert("Found script "+this.id); 
}); 

Bu işaretleme HTML belgesinin VÜCUT içinde:

<body> 
    <script id="filter-search" type="text/html"> 
     <dt>Search</dt> 
     <dd><input type="text"/></dd> 
    </script> 
</body> 

Ben de içine koyarak denedim HTML belgesinin KAFA ve hala bulunamadı. Hiç bir uyarı gösterilmiyor.

yerine bu benim kodunu değiştirmek durumunda:

$("script[type*=javascript]").each(function() { 
    alert("Found script "+this.id); 
}); 

Sonra harici dosyaya bir src sahip HEAD sadece komut dosyalarını bulur. Asıl sayfasındaki komut dosyaları bulunamadı. Örneğin, HEAD aşağıdaki ile:

<head> 
    <script type="text/javascript" src="jquery.js" id="jquery"></script> 
    <script type="text/javascript" src="jquery-ui.js" id="ui"></script> 
    <script type="text/javascript" id="custom"> 
     $(document).ready(function() { 
      $("script[type*=javascript]").each(function() { 
       alert("Found script "+this.id); 
      });   
      $("script[type*=html]").each(function() { 
       alert("Found TEMPLATE script "+this.id); 
      });   
     }); 
    </script> 
    <script id="filter-test" type="text/html"> 
     <dt>Test</dt> 
    </script> 
</head> 
<body> 
    <script id="filter-search" type="text/html"> 
     <dt>Search</dt> 
     <dd><input type="text"/></dd> 
    </script> 
</body> 

aşağıdaki uyarıları almak:

  • Bulunan komut jquery
  • Bulunan senaryo içinde

custom ve filter-test komut ui KAFA, body etiketinde filter-search komut dosyası seçilmemiş.

bu beklenen davranış mı? Bu neden çalışmıyor? Etrafında çalışabilirim, ama işe yaramazsa can sıkıcıdır.

DÜZENLEME: Bu, aslında yukarıdaki örnek kullanılarak gayet iyi çalışıyor. Benim durumumda, jquery kodu harici bir Javascript modülünde idi ve kesinlikle çalışmıyordu. Kodu, sayfadaki bir kod etiketine taşıdığımda, işe yaradı. Hala dış dosyada neden işe yaramayacağını anlayamadım, ama bir noktada çözüme kavuşursam burada rapor vereceğim.

+0

Komut dosyanızı jQuery 1.4.2 ile krom üzerinde çalıştırırsam, istenen tüm kimlikler uyarılır – jAndy

+0

@tauren Yakın zamanda benzer bir sorun yaşadım. Lütfen bir denemeyi deneyebilirsiniz: başka bir şeye metin/html değiştir (metin/şablon öner) ve bunun dış komut dosyanızla çalışıp çalışmadığını görün ... – UpTheCreek

cevap

2

Hangi tarayıcıları kullanıyorsunuz?

  • Bulunan komut jquery
  • Bulunan komut
  • Bulunan komut dosyası özel
  • Bulunan ŞABLON komut filtre testi
  • ui: Bu komut dosyası uyarıları bana vererek Chrome, Firefox ve IE6 benim için çalışıyor
  • Bulunan TEMPLATE komut dosyası filtresi arama
+0

Kodu doğru bir javona koyduğumda da çalışıyorum. HTML'nin kendisinde hazır kapatma. Sorguda tam olarak komut dosyası yerine içe aktarılan harici bir javascript modülünün içinden geçen kodu test ediyordum. Hala harici bir betik modülünden çalışırken neden çalışmadığını anlamıyorum. Daha fazla zamana bakmak zorundayım. Ama en azından yerel bir senaryodan çalışıyor. Test ettiğin için teşekkürler! – Tauren

1

Harici bir komut dosyası ile yaşadığınız sorun büyük olasılıkla yükleme sırasından kaynaklanıyor olabilir. Duyarlılığı en üst düzeye çıkarmak için, tarayıcı, sayfa tam olarak karşıdan yüklenip ayrıştırılmadan önce, sayfada karşılaştıkları gibi komut dosyalarını yüklemeye ve yürütmeye başlar. Dolayısıyla, başlık öğesinde bağlantılı bir komut dosyanız varsa, muhtemelen özel komut dosyası etiketleriniz gibi sayfanın aşağısında belirtilen DOM bölümlerine erişemeyecektir.

iki olası çözümler: özel etiketler kullanmak komut önce gelen böylece

  • komut dosyası etiketleri yeniden düzenleyin.
  • Komut dosyalarınızı DOM'un yüklenmesini bekleyen bir şeyle (jQuery $() shortcut gibi) sarın.