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 的 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>
于 2008-10-09T12:54:51.757 回答
1

嗯,我似乎无法在 IE7 中复制该问题(两种形式对我来说都很好)。怎么破?它也不隐藏,还是只隐藏第一个?

于 2008-10-09T11:54:39.583 回答
0

您是否尝试过逗号后没有空格?规范中给出的示例没有空格。

于 2008-10-09T11:57:41.997 回答
0

根据文档,应该可以工作。您有可能需要删除逗号后的尾随空格字符。

于 2008-10-09T12:00:20.977 回答
0

碰巧,您的元素之一是否嵌套在另一个元素中?

IE:

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

如果是这样,您可能会遇到指针问题,IE 可能在您尝试确定它是一个 div 之前释放了 bar。的行为

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

在这种情况下是:

  1. 用 xx 替换 #foo
  2. 用 xx 替换 #bar
  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: */ 
}

但这是你最后的手段,就在获得某种 JS 调试器绑定 IE 并将错误跟踪到其核心之后。

于 2008-11-25T10:29:33.417 回答