Jquery代码在IE中不起作用

时间:2011-05-13 21:42:59

标签: jquery visual-studio-2008 internet-explorer-9

我对这个问题感到困惑,这个问题在我推出IE 9开发工具之后似乎已经开始了。我正在使用Visual Studio 08开发(因为页面是ASP.net ap的一部分),并且在所有其他浏览器中工作的所有突然简单的Jquery选择器在IE中都不起作用 - 在VS内部浏览器(IE7)中或者在独立的IE 9中.Visual Studio告诉我一个Jquery插件(Scrollpane或Preload,取决于哪个被称为第一个)是“未定义的”。我没有其他错误。

我删除了插件和对它们的引用。我还删除了一个在预加载期间阻止点击的叠加层。这对IE没有任何影响。

这是一行代码,无论我做多么明确,都不会在IE中运行:

$('#pictureholder > div.display > img[src|="' +  image + '"]').parent('div.display').removeClass('noshow').addClass('nowshow').fadeIn('slow');

这可以在其他浏览器中运行,无论是否有显式父选择器。

1 个答案:

答案 0 :(得分:0)

<img>

的属性选择器似乎存在错误

Sizzle在不支持querySelectorAll()elem [attr]的UAs中使用,返回image-src的转换路径。所以选择器不匹配。 我认为这是一个真正的错误,因为它不是CSS规范中定义的行为。

您可以使用filter()代替:

$('#pictureholder > div.display > img')
 .filter(function(){return $(this).attr('src').match(new RegExp('^('+image+'|'+image+'-.*)$'));})
  .parent('div.display')//continue the chain here

或改变Sizzle的行为。为此,请在嵌入式jquery.js之后插入以下指令:

jQuery.find.selectors.attrHandle.src= function( elem ) 
{
  return elem.getAttribute( "src",2 );
}

(它会强制Sizzle使用文档中定义的属性而不是元素的属性)