簡體   English   中英

這個遺留代碼的含義是什么?

[英]What is the meaning of this legacy code?

這是一段可以追溯到Netscape Navigator時代的js代碼。 我無法弄清楚或找到這個人這樣做的原因。

function id(i)
{   

   var e;
   if (document.getElementById)
     return document.getElementById(i);
   else if (document.all)
     return document.all[i];
   else if (document.layers)
     return document.layers[i];  

   return null;
}

在較新的瀏覽器中, if(document.getElementById)總是如此。 看起來它正在檢查是否存在該功能,但我不確定。

我問的原因是,這個代碼讀取了應該具有IE8及以下瀏覽器的name屬性的元素的name不是 id )。 我的任務是嘗試讓它在更新的瀏覽器上更有效地工作。 但首先,我真的需要了解這段代碼的含義。

從諸如<tr>屬性讀取name是在其他地方完成的,並且使用它作為自定義屬性是一個非常簡單的修復。 我收錄的這件作品涉及更多的作品,並不那么簡單。

這是getElementById的一種特征檢測形式 - 幾乎:

function id(i)
{   

   var e;
   if (document.getElementById) // the standard way
     return document.getElementById(i);
   else if (document.all) // old IE model, needed for very old IE versions
     return document.all[i];
   else if (document.layers) // old netscape model, Netscape 4 etc.
     return document.layers[i];  

   return null;
}

除非你支持IE <5.5或Netsape <6,否則兩者都不應該誠實地支持 - 你今天應該避免使用這種形式的功能檢測。

這種代碼在今天非常普遍,以便執行特征檢測。 我想強調這樣一個事實,即代碼是編寫時的最佳實踐 ,但今天沒用。 例如,今天你有這樣的事情:

if ( !window.requestAnimationFrame ) {
    window.requestAnimationFrame = ( function() {
        return window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function(callback,element) {
            window.setTimeout( callback, 1000 / 60 );
        };
} )();
}

執行完全相同的操作,僅適用於較新的API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM