前書き: これは古いバグですが、現在は完璧な解決策が提供されています。私は常に createElement を使用して動的オプションを作成して追加してきたので、この問題に遭遇したことはありません。ただし、文字列の形式でタグを記述し、innerHTML を使用して挿入することを好む人もいます。さまざまなコーディング スタイルを持つ人々を容易にするために、IE のこのバグを解決し、5 つの主要なブラウザと互換性を持たせるメソッドをカプセル化しました。これにより、誰もが 1 つのメソッドを使用してさまざまなスタイルを実装でき、メンテナンスと管理が容易になります。 バグの説明: innerHTML を使用して IE にオプションを挿入すると、IE は前の を削除し、複数のノードに分割します。これにより、選択エラーが発生します。挿入しますが、変換中にノードに問題があります。Microsoft もこのバグについて説明し、2 つの解決策を提供しています。おそらく Microsoft からの 2 つの解決策について説明します。 1. createElement を使用します。これは、問題が発生した場合に大きな問題が発生します。 2. 完全な選択文字列を div に挿入します。 実装: 原理: innerHTML を使用しているため、ここでの主な目的は、この問題を解決することです。もちろん、文字列を使用することもできます。挿入する createElement オブジェクト。 入力されたパラメータが elementObj であるか文字列であるかが判断され、elementObj である場合は、標準の add メソッドを使用して追加し、互換性処理を実行します。文字列の場合は、div を使用して完全な選択をラップし、それを dom オブジェクトに変換し、appendChild で追加します。 注: b$.type.isElement(arg) は、オブジェクトが要素であるかどうかを判断するために bBank で使用されるメソッドです b$.browser.isIE() は、bBank で使用されてこれは IE メソッドですか? b$.parseDom(str) は、bBank で文字列を標準 dom に変換するために使用されるメソッドです。これについては、以前のブログ bBank フレームワークの紹介で詳しく説明しています。 .cnblogs.com/bruceli/archive/2010/04/15/bBank.html
var sltObj=document.getElementById('xx');//選択オブジェクトを取得します。これは単なる例であり、自分の習慣に従って取得できます function addOption(obj , arg) { if (b$.type.isElement(arg)) { if (b$.browser.isIE()) obj.add(arg); else obj.add(arg); , null); return; } var str = '' ' '; var slt = b$.parseDom(str) ; for (var i = 0, num = slt.length; i obj.appendChild(slt[0]) }; 使用:
addOption (sltObj, '
a< /option>');
END 以上、私が書いたjsフレームワークを組み込みました。 使用: b$('obj').addOption(arg);