2008-10-09 100 views
2

在Firefox下工作,但斷裂處IE7 & 8:jQuery的CSS選擇器在IE

$("#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 
+0

這適用於我,在IE7和火狐 – Nico 2008-10-09 12:08:37

回答

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代碼,那麼是否還有其他的字符串「nodeName」可能會干擾jQuery的發生。

您還可以通過創建一個xx.html文件並在IE7/8中對其進行操作來測試以下內容嗎?它在Ubuntu中的Firefox 3下運行良好,在選擇器中的逗號之後有或沒有空格。

<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> 
+0

感謝這個Pax。你的例子工作正常。我會做一些調試,並讓你知道我的問題是什麼。至少我現在知道它是我的錯;) 非常感謝! – 2008-10-09 13:33:05

1

嗯,我似乎無法複製在IE7的問題(這兩種形式都適合我)。它如何中斷?它是不是隱藏起來,還是隻隱藏第一個?

+0

好吧,我的實際生活代碼是這樣的: $(「#收費-gsm,#收費-​​gsm-常見問題,#收費-​​gsm價格」)。 HTML(HTML); 和我的錯誤是這樣的(IE8): 消息:「節點名稱爲空或不是對象 行:19 字符:150 代碼:0 URI:http://ajax.googleapis.com/ajax /libs/jquery/1.2.6/jquery.min.js – 2008-10-09 12:15:44

0

應該工作,根據documentation。有一個外部機會,你需要在逗號後刪除尾部空格字符。

0

偶然地,你的元素是嵌套在其他元素之一嗎?

即:

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

如果是的話,你可能會遇到一個指針問題,在IE瀏覽器可能你試圖找出它的一個div之前釋放吧。的

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

行爲在這種secenario是:

  1. 更換#foo與XX
  2. 更換#bar與XX
  3. 與XX

更換#baz然而,如果在階段2 & 3,#bar和#baz不再存在,你會有一點樂趣。(如果xx碰巧包含#bar和#baz的副本並不重要,它們可能會是不同的對象,並且您要替換的初始對象已被捕獲,只是不再位於DOM中: /)

你可進行抑制(是的,GAH,可怕的想法)這個錯誤在一個try/catch封裝過程

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

但是,這是你的最後一招,讓某種JS的右後調試器綁定IE並將錯誤追蹤到其核心。