2

以下は Firefox では機能しますが、IE7 & 8 では機能しません。

$("#my-first-div, #my-second-div").hide();

だから私はこれをしなければなりません:

$("#my-first-div").hide();
$("#my-second-div").hide();

これは正常ですか?

編集:わかりました、私の実際の実際のコードはこれです:

$("#charges-gsm,#charges-gsm-faq,#charges-gsm-prices").html(html);

私のエラーはこれです

( IE8): Message: 'nodeName' is null or not an object
  Line: 19 Char: 150 Code: 0
  URI: http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js 
4

5 に答える 5

2

指定する場所は次のようになります。

Message: 'nodeName' is null or not an object
    Line: 19 Char: 150 Code: 0
    URI: http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js

jqueryのその特定の部分は次のとおりです。

nodeName:function(elem,name){
    return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();
}

これ自体がへの呼び出しのために作成されたクロージャですjQuery.extend()。したがって、「ソースの表示」またはそれに相当するIEを実行する場合、jQueryの文字列に干渉する可能性のある文字列「nodeName」が他に出現することはありますか。

xx.htmlファイルを作成してIE7/8で操作することにより、以下をテストすることもできますか?UbuntuのFirefox3では、セレクターのコンマの後にスペースがある場合とない場合で正常に動作します。

<html>
  <head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function(){
      $("a").click(function(event){
        $("#charges-gsm,#charges-gsm-faq,#charges-gsm-prices").html("xx")
        event.preventDefault();
      });
    });
  </script>
  </head>
  <body>
    <a href="http://jquery.com/">jQuery</a>
    <hr>
    <div id="charges-gsm">CHARGES-GSM</div>
    <div id="charges-gsm-faq">CHARGES-GSM-FAQ</div>
    <div id="charges-gsm-prices">CHARGES-GSM-PRICES</div>
  </body>
</html>
于 2008-10-09T12:54:51.757 に答える
1

うーん、IE7 で問題を再現することはできないようです (どちらの形式も問題なく動作します)。どのように壊れますか?どちらも隠していませんか、それとも最初のものだけを隠していますか?

于 2008-10-09T11:54:39.583 に答える
0

たまたま、要素の 1 つが他の要素の中にネストされていませんか?

すなわち:

<div id="foo">
  <div id="bar"> 
    <div id="baz">
  </div>
</div>

もしそうなら、ポインタの問題が発生している可能性があります。IE は、div を解決しようとする前にバーを解放した可能性があります。の振る舞い

$("#foo,#bar,#baz").html("xx"); 

このシナリオは次のとおりです。

  1. #foo を xx に置き換えます
  2. #bar を xx に置き換えます
  3. #baz を xx に置き換えます

ただし、フェーズ 2 と 3 で #bar と #baz が存在しない場合は、少しお楽しみいただけます。( xx に #bar と #baz のコピーが含まれているかどうかは関係ありません。それらは異なるオブジェクトである可能性が高く、置き換えている最初のオブジェクトは既にキャプチャされており、単に DOM に存在しません: / )

手順を try/catch にカプセル化することで、このエラーを抑制できる可能性があります (はい、gah、ひどい考えです)。

try { 
  $("#foo,#bar,#baz").html("xx"); 
}
catch( e ) 
{
   /* DO NOTHING D: */ 
}

しかし、IE をバインドする何らかの JS デバッガーを取得し、エラーをそのコアまで追跡した直後の、これは最後の手段です。

于 2008-11-25T10:29:33.417 に答える
0

コンマの後にスペースを入れずに試しましたか? 仕様に示されている例にはスペースがありません。

于 2008-10-09T11:57:41.997 に答える
0

ドキュメントによると、動作するはずです。コンマの後の末尾のスペース文字を削除する必要がある場合があります。

于 2008-10-09T12:00:20.977 に答える