SORU
12 Mart 2010, Cuma


En iyi Uygulama: HTML kimliği veya adı özniteliği tarafından form elemanları Erişim?

Herhangi bir deneyimli JavaScript geliştirici bildiği gibi, birçok (çok) şekilde aynı şeyi yapmak vardır. Örneğin, aşağıdaki gibi bir metin alanı var

<form name="myForm">  
    <input type="text" name="foo" id="foo" />

JavaScript bu erişmek için birçok yol vardır:

[1]  document.forms[0].elements[0];
[2]  document.myForm.foo;
[3]  document.getElementById('foo');
[4]  document.getElementById('myForm').foo;
     ... and so on ...

Yöntem [1] ve [3] Mozilla Gecko Dokümantasyon iyi belgelenmiş, ama ikisi de idealdir. [1] çok genel faydalı olmak ve [3] gerektirir bir kimliği ve Adı (sunucu taraflı bir dil için veri gönderme olacak varsayarak). İdeal olarak, en iyi tek bir kimliği (her ikisi de yaşıyor . ya da adı özniteliğini olurdu ^em>birazözellikle kimliği herhangi bir css için gerekli değildir, ve yazım hataları, vs.) olasılığını artırır fazla.

[2] galiba en sezgisel ve sanırım yaygın olarak kullanılan, ama izlemedim başvurulan Geko belgeleri ve endişelendiğim hem ileriye uyumluluk ve çapraz tarayıcı uyumluluğu (ve tabii ki olmak istiyorum gibi standartlara uyumlu olarak mümkün).

Burada en iyi uygulama nedir? Herkes bu sorunu çözmek olabilecek DOM belgelerine veya W3C belirtimi bir şey nokta olabilir?

Sigara kitaplığı bir çözüm (jQuery/Prototype) özel olarak ilgileniyorum unutmayın.

CEVAP
12 Mart 2010, Cuma


[1] Belge.forms[0].elements[0];

"Hayır-omg-asla!< . em ^/ " öğesine erişmek için bu yöntemi görünce. aklıma geliyor Bu sorun, DOM (örn: dizi) eleman sırası statik, tutarlı ve güvenilir bir kişinin zaten normal bir veri yapısı olduğunu varsayar. Bu durum böyle değil o zaman yüzde 99.9999 olasılıkla biliyoruz. Form içinde yeniden düzenlenmesi veya input elementler, başka bir ekleme 5 ** soru formu önce sayfaya, ya da söz konusu form hareket ediyor bu kod sonları tüm davalar. Kısa hikaye: bu çok kırılgan. Ya da bir şey eklemek, taşımak, kırmak için gidiyor.

[2] belge.myForm.fan;

Bu Sergey ILinsky.

  • id öznitelik bakarak erişim rasgele öğeler: document.getElementById("myform");
  • Erişim biçim öğeleri adı, ana form elemanı için akrabası tarafından adlı: document.getElementById("myform").foo;

Bu yöntem ile benim ana sorun name öznitelik form uygulandığında işe yaramaz. Adı POST/parçası olarak sunucuya geçirilir ve karma tarzı yer imleri için çalışmıyor.

[3] belge.('') fan; . getelementbyıd

Benim görüşüme göre, bu en çok tercih edilen yöntemdir. Doğrudan erişim en kısa ve net yöntem.

[4] belge.('') myForm.getelementbyıd fan;

Benim görüşüme göre, bu kabul edilebilir, ancak gerekli olandan daha fazla ayrıntılı. #3 yöntem tercih edilir.


Kendimi çok video from Douglas Crockford ve bu konuda hiç yoktan en az bir saat oldu. İlgi noktası -12:00. Özetlemek gerekirse:

  • Belge koleksiyonları (belge.çapa, belge.form, vb.) gereksiz ve yersiz (yöntem 1).
  • name öznitelik şey adına, onlara erişmek için kullanılır. Windows, giriş alanları ve Bağlantı etiketlerini adlandırma gibi şeyler için.
  • "KİMLİĞİNİ erişebilir, böylece benzersiz bir öğeyi tanımlamak için kullanmanız gereken bir şeydir. Onlar (adı ve NUMARASI) değiştirilebilir olması için kullanılır, ama artık değil."

Bu yüzden siz sahipsiniz. Anlamsal olarak, bu en mantıklı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DJAndrewRyan

    DJAndrewRyan

    22 Ocak 2007
  • whiteboy7thst

    whiteboy7ths

    1 Temmuz 2009
  • WOSU Public Media

    WOSU Public

    23 AĞUSTOS 2007