選択した要素の .html() プロパティに対する jQuery 設定がエラー 'nodeName' is null or not an object を返すという問題があります。これは IE6 と IE7 でのみ発生しますが、FF2、FF3、Opera (最新の 2008 年 11 月 12 日)、または Safari (やはり最新) では発生しません。
5 に答える
JQueryのバグのように見えます。例外は、1.5.1 の 605 行目でスローされます。
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
elem
object の nodeName がString と同じ場合、関数は true を返しますname
。そうでない場合、または に nodeName がない場合はelem
、false を返します。ただし、elem
使用前にテストされていません。したがって、elem
が null の場合、その.nodeName
メンバーの呼び出しによって null ポインター例外がスローされます。
簡単な修正は、elem
短絡AND句の先頭に含めることです。
return elem && elem.nodeName && elem.nodeName.toUpperCase()...
が null の場合elem
、この関数は節の最初のテストで false を返し、決して を呼び出そうとしないelem.nodeName
ため、NPE が回避されます。
すべてをチェックしたわけではありませんが (頻繁に使用されます)、この関数が使用される多くの場合、関数呼び出しの前elem
にテストされます。しかし、すべての場合ではないようです。
問題を解決しました。例は次のようになります。
$('#section #detail .data').html(データ);
...データは AJAX 呼び出しから返された HTML であり、このバグは IE6 および IE7 で最初の AJAX 呼び出しではなく、2 回目の AJAX 呼び出しでのみ発生します。不可解です。返されるエラーは次のとおりです。
'nodeName' is null or not an object
修正は、設定する前に最初に変数を単純にクリアすることです。
$('#section #detail .data').html(''); $('#section #detail .data').html(データ);
その後、IE6 と IE7 が再び動作を開始しました。
ところで、IE7 でデバッガーを動作させるには、Visual Web Developer 2008 Express Edition をインストールする必要がありました。その情報はこちらです。
私にとっては、存在しない要素を選択しようとしたときに IE で発生していました。-1として返された兄弟の中からインデックスを取得しようとしていました。次に、この要素を親からインデックスで取得して表示しようとしましたが、このエラーが発生しました。
したがって、インデックスが-1に等しくないかどうかをチェックします。これで問題は解決しました。
接続されているかどうかはわかりませんが、存在することがわかっている要素の子/テキストが DOM にないという同様の問題のように聞こえるものがあります (画面にレンダリングされているためです!)
別のものを選択してから、要素を再度選択すると、問題が解決したように見えました-突然、子が表示されます。では、自分の要素を選択し、別のものを選択し、要素をもう一度選択するとどうなるでしょうか?
実行している可能性のあるノードの種類を知っていますか? または、IE quirks モードで実行していますか? #text など、一部の種類のノードは、Quirks モードの DOM で正しく表示されない場合があります。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">