2008-10-09 97 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并将错误追踪到其核心。