FirefoxだけでなくIEでも、標準のHTMLElementオブジェクトの展開に問題がありました。 PrototypeまたはJSXライブラリを使用できます。 しかし、アドインが使用されており、DOMを介して要素にアクセスするための目に優しいメカニズムではないため、このソリューションは好きではありませんでした。 たとえば、IEに新しいメソッドを表示したい
someDOMElement.getLastChild()
Firefoxでは、次のように記述します。
HTMLElement.prototype.getLastChild = function()
{
var childndex = null;
for(i = this.childNodes.length; i> 0; i--)
{
if(this.childNodes [i-1] .nodeType!= 1)
続ける;
childIndex = i-1;
休憩;
}
return this.childNodes [childIndex];
}
IEでは、要素の客観性の不器用なサポートにより、このようなチップは合格しません。 その中のすべてのオブジェクトはObjectクラスまたはその派生Elementのものですが、それらを拡張することは不可能です。 特定の各インスタンスのみが可能です(ドキュメントのすべてのDOM要素を調べます)。 ソリューションは
HTCテクノロジー(HTMLコンポーネント)で見つかりました。これはIE5.5以降でサポートされています
詳細は説明しませんが、すぐにこれを行う方法に進みます(多くの場合、詳細を理解するにはこれで十分です)。
<PUBLIC:COMPONENT lightWeight = "true" literalContent = "true">
<PUBLIC:メソッド名= "getLastChild" />
<SCRIPT LANGUAGE = "javascript1.3" type = "text / javascript">
関数getLastChild()
{
var childndex = null;
for(i = childNodes.length; i> 0; i--)
{
if(childNodes [i-1] .nodeType!= 1)
続ける;
childIndex = i-1;
休憩;
}
return childNodes [childIndex];
}
</ SCRIPT>
</パブリック:コンポーネント>
<PUBLIC:COMPONENT lightWeight = "true" literalContent = "true">コンポーネント定義の始まりを示します。
lightWeightは、簡単に言えば、説明以外のものはないことを意味します。
literalContentは、コードがXHTMLパーサーによって解析されず、Javascriptパーサーにすぐに渡されることを意味します。
上記のコードは、拡張子が「.htc」の別のファイルに配置する必要があります。 条件付きコメントでは、ページへの接続が優れています。
<!-[IEの場合]>
<スタイル>
* {
動作:URL( '/ uri / to / file.htc');
}
</ style>
<[endif]->
今のコード:
var el = document.getElementsByTagName( "body")[0] .getLastChild();
FFとIEの両方で動作します。
そのようなコードは、残念ながらOpereや他のブラウザーでは動作しません。 しかし、他のブラウザでこれを実装する方法を見つける(または誰かが教えてくれる)と思います。
当然、HTCテクノロジーはこれに限定されず、新しいイベント、プロパティ、デフォルト値を追加したり、独自のタグを作成したりできます。