Your Ad Here

Javascript Yazılım Kuralları (JS)

23 Aralık 2007

Öğe içerikleri

DOM, belgenin neresinde olursa olsun, tüm öğelere erişim için kolay bir yoldur. DOM tarayıcılarla birlikte çalışan yollarla birçok öğeye erişilebilir. Eğer kodlamanızın Netscape 4 ile çalışmasını isterseniz (bugünlerde pek kullanılmasa da) buradaki kurallar kullanışlı olur.

Netsacpe4 gibi katmanlı tarayıcılar diğer tarayıcılarda çok değişiktir. Tüm form'lar, resimler, bağlar ve bir katman içindeki çocuk katmanlar yeni 'document' nesnesiyle erişilmelidir.

Bir şeye soysal olarak nasıl erişilir

MacroMedia önce soysal 'wysiwyg' toplu erişimli (reference-all) işlevi olarak çıktı.Resimlere, formlara ve her tür katmana erişebilirdi. Bu da aranan ada uygun nesne adı ya da 'id' anlamına gelir. Bundan esinlenerek birkaç farklı şeyi de içeren aşağıdaki işlev yazıldı:

Bunun erişebildiği tek şey, bağlantı nesnesidir. Yapıları gereği, bağlantı nesneleri sayısal dizinleriyle erişilebilir. Çapalı öğelerden farklı olarak, bağlantı nesnelerine ad niteliğiyle erişilemez. Çapalı birikime erişilse, bağlantı özelliklerine ad ile erişilmez. Her çapayı adı tutuyor mu diye incelemek doğru çapalı öğeye erişme olanağı vardır ama bağa hala erişim olmaz.

Eğer adlar, form içindeki giriş alanlarının adlarında paylaşılıyorsa, bu işlev aynı ad paylaşan tüm giriş alanlarına erişir.
function MWJ_findObj( oName, oFrame, oDoc ) {
  /* Eğer bir katmanda çalışmıyorsa, çalışılan iskelet
     içindeki belgeye atanmalıdır. Eğer çalışılan iskelet tanımlı
     değilse, sayfanın 'window' nesnesi kullanılmalıdır.
  UYARI: - Eğer sayfanız bir başka adreste bulunuyorsa
     iskeletler (çerçeveler) arası kodlama hata verebilir
  */
  if( !oDoc )
       { if( oFrame ) { oDoc = oFrame.document; }
  else { oDoc = window.document; } }

  //resimler, formlar ve katmlanlar denetlenir
  if( oDoc[oName] ) { return oDoc[oName]; }

  //pDOM katmanlarına bakılır
  if( oDoc.all && oDoc.all[oName] ) { return oDoc.all[oName]; }

  //DOM katmanlarına bakılır
  if( oDoc.getElementById && oDoc.getElementById(oName) ) {
    return oDoc.getElementById(oName); }

  //form öğelerine bakılır
  for( var x = 0; x < oDoc.forms.length; x++ ) {
    if( oDoc.forms[x][oName] ) { return oDoc.forms[x][oName]; } }

  //çapa atma öğelerine bakılır
  //NOT: yalnız çapa özellikli değişkenler açıktır.
  //Katmanlı tarayıcılardaki bağ özellikleri değil
  for( var x = 0; x < oDoc.anchors.length; x++ ) {
    if( oDoc.anchors[x].name == oName ) {
      return oDoc.anchors[x]; } }

  //yukarıdakilerin katmanlı tarayıcılarda
  //katman içinde olmaları incelenir
  for( var x = 0; document.layers && x < oDoc.layers.length; x++ ) {
    var theOb = MWJ_findObj( oName, null, oDoc.layers[x].document );
      if( theOb ) { return theOb; } }

  //çerçevelere, değişkenler ve işlevlere bakılır
  if( !oFrame && window[oName] ) { return window[oName]; }
  if( oFrame && oFrame[oName] ) { return oFrame[oName]; }

  //Eğer çerçeveler arasında denetim yapıyorsanız,
  //yukarıdakilerden herhangi birini aşağıdaki çocuk
  //çerçevelerinden her birinden arayın:
  for( var x = 0;
       oFrame && oFrame.frames && x < oFrame.frames.length;
       x++ ) {
    var theOb = MWJ_findObj( oName, oFrame.frames[x],
                             oFrame.frames[x].document );
    if( theOb ) { return theOb; }
  }
  return null;
}
Yorum yapmadan aşağıdaki biçime dönüşür:
function MWJ_findObj( oName, oFrame, oDoc ) {
  if( !oDoc ) { if( oFrame ) { oDoc = oFrame.document; }
  else { oDoc = window.document; } }
  if( oDoc[oName] ) { return oDoc[oName]; }
  if( oDoc.all && oDoc.all[oName] ) { return oDoc.all[oName]; }
  if( oDoc.getElementById && oDoc.getElementById(oName) )
      { return oDoc.getElementById(oName); }
  for( var x = 0; x < oDoc.forms.length; x++ ) {
      if( oDoc.forms[x][oName] ) { return oDoc.forms[x][oName]; }
  }
  for( var x = 0; x < oDoc.anchors.length; x++ ) {
      if( oDoc.anchors[x].name == oName ) { return oDoc.anchors[x]; }
  }
  for( var x = 0; document.layers && x < oDoc.layers.length; x++ ) {
    var theOb = MWJ_findObj( oName, null, oDoc.layers[x].document );
    if( theOb ) { return theOb; }
  }
  if( !oFrame && window[oName] ) { return window[oName]; }
  if( oFrame && oFrame[oName] ) { return oFrame[oName]; }
  for( var x = 0;
       oFrame && oFrame.frames && x < oFrame.frames.length;
       x++ ) {
    var theOb = MWJ_findObj( oName, oFrame.frames[x],
                             oFrame.frames[x].document );
    if( theOb ) { return theOb; }
  }
  return null;
}
Belgedeki bir öğeye erişim için işlev iki biçimde çağrılır:
var theOb = MWJ_findObj( NameOrId );
'frameset' içinde başka bir belgedeki bir öğeye erişim için iskelet yapı içinde ne kadar yukarıya çıkılabileceği seçilir. Unutulmamalıdır ki 'top' kullanılırsa, bir başkası kendi isteket yapısına sayfanızı yükleyebilir ve bir hata oluşabilir.
var theOb = MWJ_findObj( NameOrId, ReferenceToTopMostFrameToSearch );