2015-08-29 22 views
2

Как я могу проверить, поддерживаются ли функции getAttributeNode, setAttributeNode и createAttribute браузером?JavaScript - проверка, если getAttributeNode, setAttributeNode и createAttribute поддерживаются браузером

Мне нужно определить по JavaScript ограничение между IE6 и IE5.5 без агента пользователя Navigator (с использованием эмулятора IEtester или IE console).

Почему? Проверка поддержки браузера Modernizr

Спасибо!


Спасибо, Ориол! Но, если быть более конкретным, мне нужно что-то вроде этого:

var support = true; 
if(typeof(document.getElementsByClassName) === 'undefined'){ 
    support = false; 
    } 

if(support){ 
    // IE > 8 
    }else{ 
    // IE <= 8 
     } 

Но вместо IE 8 IE 5.5. Использование getAttributeNode, setAttributeNode и createAttribute вместо document.getElementsByClassName


НАЙДЕНО ЭТО !!! используя Oriol ответ и метод обнаружения видеосигнала от http://diveintohtml5.info/detect.html

function supports() { 
    var Element = document.createElement('div'), 
    Q1 = !!Element.getAttributeNode, 
    Q2 = !!Element.setAttributeNode, 
    Q3 = !!document.createAttribute; 
    return Q1 && Q2 && Q3; 
} 

if(supports()){ 
    // IE > 5.5 
    }else{ 
    // IE <= 5.5 
     } 
+0

Вы можете просто использовать 'if (myElement.getAttributeNode && myElement.setAttributeNode && myElement.createAttribute) {сделать что-то}' – Saar

ответ

2

Вы можете использовать оператор in, чтобы проверить, если объект имеет некоторое свойство:

'getAttributeNode' in myElement 
&& 'setAttributeNode' in myElement 
&& 'createAttribute' in document 

myElement должна быть ссылкой на какой-то элемент, например, document.documentElement.

Правильный способ будет проверяться в Element.prototype и Document.prototype, но старый IE не выставляет их. Поэтому вы должны проверить в некоторых случаях и предположить, что он будет работать и для других.

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

+0

И без элемента DOM? Как document.getElementsByClassName? – lucasgabmoreno

+0

@lucasgabmoreno 'getAttributeNode' и' setAttributeNode' доступны только в экземплярах 'Element', а не в' Document'. – Oriol

+0

функция поддерживает() { вар Элемент = document.createElement ('DIV'), Q 1 = !! Element.getAttributeNode, Q2 = !! Element.setAttributeNode, Q3 = !! document.createAttribute; возвращение Q1 Q2 && && Q3; } если (опоры()) {// IE> 5,5 } еще {// IE <= 5,5 } – lucasgabmoreno