[英]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.