Код Jquery не будет работать в IE - PullRequest
0 голосов
/ 14 мая 2011

Я озадачен этой проблемой, которая, похоже, началась после того, как я запустил инструмент для разработчиков 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 голосов
/ 14 мая 2011

Кажется, есть ошибка с селектором атрибута <img>.

Sizzle использует в UA, которые не поддерживают querySelectorAll () elem [attr], что возвращает переведенный путьобраз-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 работать с атрибутом, определенным внутри документа, а не со свойством элемента)

...