2013-08-23 3 views
3

Я бегу некоторые JavaScript, который использует это:querySelectorAll альтернатива для IE

controls = document.querySelectorAll("input,textarea,button"); 

Он должен работать на IE 9 (который является версией, что разработчики и использование клиента). Но в нашем проекте мы используем некоторые действительно старые веб-компоненты, которые работают только в режиме совместимости. И querySelectorAll работает только в режиме стандартов из того, что я нашел после некоторых исследований.

Есть ли альтернатива?

EDIT: она отлично работает на Chrome и FF

+3

Как насчет pollyfill https://gist.github.com/branneman/1200441 или исправления сломанного материала. :) – epascarello

+0

+1 для «исправления сломанных вещей» ... вы не можете полагаться на вещи, которые были сломаны, а затем ожидать, что они будут работать правильно. – Steve

+0

Я дал +1 для «исправления сломанных вещей». Мы МОЛИТЬ, но на самом деле мы не можем. Не в настоящий момент. Эта система была создана с использованием .net framework 1.1 ... в прошлом году мы обновили до 2.0. Первоначально предполагалось, что он запускается только в IE ... но нас попросили сделать его несколькими браузерами ... но даже на хром и firefox некоторые вещи сломаны. Это действительно старая система ... даже малейшее изменение может заставить ее сбежать. Не шутите на этом ... –

ответ

8

querySelectorAll прекрасно работает в IE9. Он работает даже в IE8.

Но это звучит так, как будто ваша проблема заключается в том, чтобы заставить его работать в режиме quirks или в режиме совместимости.

Если это проблема, тогда ... ну, проблема в этом режиме, а не в функции. Вам нужно, чтобы сайт был в стандартном режиме, а затем querySelectorAll будет работать.

Весь смысл режима совместимости - заставить браузер эмулировать более старую версию IE. Основной способ сделать это - отключить все функции, добавленные с этой версии.

Итак, в основном вы говорите: «Я отключил половину функций моего браузера, как я могу снова использовать одну из этих функций?»

И очевидный ответ: снова включите функции.

Способ сделать это, чтобы убедиться, что браузер находится в стандартном режиме.

Вы должны сделать две вещи:

  1. Убедитесь, что вы имеете действительный доктайп, так что вы можете избежать режима Quirks. Если у вас его нет, добавьте <!DOCTYPE html> в самый верх вашего кода (над тегом <html>).

  2. Добавьте IE режим стандартов мета-тег где-то в вашем <head> элемента:

    <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
    

    Это заставит IE использовать наилучший режим имеет в наличии - так IE9 будет находиться в режиме стандартов IE9 и т.д.

Вы должны убедиться, что оба указанных выше находятся на всех страницах вашего сайта.

[EDIT]
Вы сказали, что вы полагаетесь на старый компонент, который работает только в режиме Совместимость.

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

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

Если вы действительно не можете выйти из режима совместимости, то вы в значительной степени застреваете.

Ваш единственный реальный вариант в этом случае, чтобы перейти к использованию библиотеки как JQuery, который имеет свой собственный движок выбора построен в.

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

+0

К сожалению, это огромная система ... переписывание - это не-XD. И я действительно уверен, что некоторые из наших компонентов были прекращены ... так что да ... иногда мы застряли ... как много. –

+0

Вы не описали много о компонентах, о которых идет речь, но если мы говорим о режиме совместимости (в отличие от режима quirks), действительно не должно быть многого, что может сломаться, перейдя из режима совместимости в стандартный режим. Особенно, если известно, что он работает в текущих версиях Firefox и Chrome. Я предполагаю, что если есть проблема с этим, что ломается в стандартном режиме, это, вероятно, будет довольно легко исправить. У вас есть исходный код? Держу пари, это не составит труда. Но в любом случае, если они были прекращены, ответственный бизнес должен рассматривать возможность их замены в любом случае. – Spudley

+0

Ваш ответ просто бесполезен. Очевидно, что если он обновит поддержку версий IE 9+, у него не будет этой проблемы. –

1

Ну, после некоторых поисков, я в конечном итоге с помощью этого:

if(navigator.userAgent.indexOf("MSIE") != -1) {      
    controls = document.getElementsByTagName('input'); 
}else{  
    controls = document.querySelectorAll("input,textarea,button"); 
} 

Он работает. Я сделаю еще несколько тестов, надеясь, что он будет работать xD.

Смежные вопросы