2011-05-13 228 views
0

我对这个问题感到困惑,这个问题似乎在我启动IE 9开发者工具后就开始了。我在Visual Studio 08中开发(因为页面是ASP.net ap的一部分),并且在所有其他浏览器中工作的所有突然简单的Jquery选择器都不能在IE中工作 - 无论是在VS内部浏览器(IE7)或独立的IE 9中。Visual Studio告诉我,一个Jquery插件(Scrollpane或Preload,取决于哪个被首先调用)是“未定义的”。我没有得到其他错误。jquery代码将无法在IE中工作

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

这是,无论我怎么明确使它不会在IE中运行的代码行:

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

这将运行在有或没有明确的父母选择其他的浏览器。

+0

你尝试摆脱你的直系后代选择器? – Jason

+0

什么商店在图像=? –

+0

那里有很多问题。 “什么是图像?”是最紧迫的。你真的有一个'id''图片处理器'的元素,它带有一个* immediate *子元素,它是一个'div',其类别是“display”,它的* immediate *子元素是'img',其中'src'包含'image' (不管那是什么)...... div.display真的是隐藏的。你是否已经把它分解成它的组成部分,然后在调试器中走过去,看看哪个部分不起作用。等等 –

回答

0

似乎有一个<img>的属性选择器的错误。

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

您可以使用过滤器()代替:

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

或更改滋滋声的行为。要做到这一点,插入右侧嵌入的jquery.js后,下面的指令:

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

(这将迫使灒与属性工作的文件,而不是该元素的属性中定义)

+0

I我没有使用Sizzle,但感谢帮助我理解发生了什么,IE不认识“src”:var h = $('img [src | =''+ image +'“''')。attr('id '); 警报(h); – JaneH

+0

对不起,继续。我给了一些图像id来测试。 IE警报“未定义”,而所有其他浏览器返回该ID。我将尝试搜索图像作为文本节点...或将其包含在div或span ...或其他内容中。 – JaneH

+0

Sizzle是jQuery的一部分。 –