2009-02-25 3 views
34

У кого-нибудь есть идеи о том, как проверить что-то конкретное для IE6 (а не IE7) с помощью jquery.support?Обнаружение IE6 с помощью jQuery.support

Моя проблема в том, что IE6 поддерживает: hover psuedo-class только для элементов привязки, а IE7 поддерживает его для всех элементов (как FF, Chrome и т. Д.). Поэтому я хочу сделать что-то особенное, если браузер не поддерживает: наведите указатель на все элементы ... таким образом, мне нужен способ проверить эту функцию. (не хотите использовать jQuery.browser). Есть идеи?

+0

ни один из ответов ниже на самом деле не отвечает на вопрос! это абсурдно. – vsync

ответ

55

Хотя рекомендуется проверять поддержку функций, а не пользовательский агент, нет простого способа проверить что-то вроде поддержки свойства css с помощью JavaScript. Я рекомендую вам либо следовать приведенным выше плакатам, предлагая использовать условные комментарии, либо использовать jQuery.browser. Простая реализация (не подтверждено для выполнения или ошибки) может выглядеть следующим образом:

if ($.browser.msie && $.browser.version.substr(0,1)<7) { 
    // search for selectors you want to add hover behavior to 
    $('.jshover').hover(
    function() { 
     $(this).addClass('over'); 
    }, 
    function() { 
     $(this).removeClass('over'); 
    } 
} 

В разметке, добавьте класс .jshover к любому элементу, который вы хотите навести CSS эффекты на. В вашем CSS, добавить правила, как это:

ul li:hover, ul li.over { rules here } 
+0

Это то, с чем я тоже оказался. Просто хотелось узнать, есть ли лучший способ сделать это. – Jaime

+5

Вам действительно не стоит использовать $ .browser - он устарел. – Sampson

+0

@Jonathanl: Точно ... так что я должен использовать для этого? – Jaime

0

jQuery.support не имеет свойств для обнаружения: поддержка парения http://docs.jquery.com/Utilities/jQuery.support

Но, вероятно, вы можете просто использовать парение() событие http://docs.jquery.com/Events/hover

+0

Да, это точно моя проблема :), я хочу, чтобы пользователь использовал событие hover(), но только когда Jaime

21

Вы можете использовать Microsoft Internet Explorer конкретного Conditional Comment применять конкретный код для IE6.

<!--[if IE 6]> 
    Special instructions for IE 6 here... e.g. 
    <script>...hook hover event logic here...</script> 
<![endif]--> 
+0

Это, вероятно, лучший вариант, просто интересно, имел другой способ сделать это ...поскольку jquery doc говорит: «jQuery поставляется с рядом свойств, вы можете свободно добавлять свои собственные». Спасибо в любом случае – Jaime

+0

Это не сработает, если вы динамически загружаете сценарии или запускаете код на динамически создаваемые элементы (например, модалы). – KyleFarris

+0

@KyleFarris зависит ... вы можете проверить IE6 с условным комментарием, и если вы соответствуете этому условию, настройте обработчики jQuery по мере необходимости для всех существующих элементов DOM и будущих элементов, используя обработчик '.live()' (в jQuery up to v1.8) или предпочтительный '.on()' из jQuery 1.7+ http://api.jquery.com/on/ – scunliffe

2

Это один из примеров того, где мы должны сделать шаг назад и спросить, почему вы это делаете.

Обычно это создание меню. Если это так, я настоятельно рекомендую вам избавиться от некоторых головных болей и использовать плагин, например, superfish или один из многих альтернатив.

Если нет, то я предлагаю вам использовать прослушиватель событий jQuery hover(). Например:

$("td").hover(function() { 
    $(this).addClass("hover"); 
}, function() { 
    $(this).removeClass("hover"); 
}); 

будет делать то, что вы хотите.

+0

Я делаю настраиваемый раскрывающийся список с потенциально большим количеством элементов, поэтому я хочу используйте событие jquery.hover в случае Jaime

+0

Является ли скорость: наведите проблему? Иными словами: стоит ли стоимость сложной поддержки смешанного решения? – cletus

+0

Хороший вопрос, возможно, нет, он просто немного вялый, используя событие hover – Jaime

20

Thickbox использует

if(typeof document.body.style.maxHeight === "undefined") { 
    alert('ie6'); 
} else { 
    alert('other'); 
} 
+0

пока что лучший вариант +1, Related: http://stackoverflow.com/questions/8931729/some-none-ie-browsers-are-showing-true-for-ie6-browser-detection –

1

Я хотел бы использовать Безотносительно: парят - http://www.xs4all.nl/~peterned/csshover.html

Он использует поведение и работает хорошо для меня.

+0

Мне понравилось это решение, очень просто. –

-2
if ($.browser.msie && parseInt($.browser.version, 10) == 6) { 
    alert("I'm not dead yet!"); 
} 
+0

Вы пропустили точку вопроса - '' .browser' больше не существует в jQuery. – Synchro

1

Просто для удовольствия (не используя jQuery.support):

$(document).ready(function(){ 
    if(/msie|MSIE 6/.test(navigator.userAgent)){ 
     alert('OMG im using IE6'); 
    } 
}); 

Вы также можете сделать это с помощью PHP

<? 
if(preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua)){ 
    echo 'OMG im using IE6'; 
} 
?> 
Смежные вопросы