document.getElementsByClassName, нарушающий селектор класса jQuery, вызванный переопределением прототипа

Проблема возникает в IE6 (вероятно, все браузеры предшествуют документу.getElementsByClassName). Использование jQuery 1.6 с Prototype 1.5

<script src="../js/jquery-1.6.js" language="javascript" type="text/javascript"> </script>
<script language="javascript" type="text/javascript">
    // Prototype will claim the '$' namespace so give jQuery '$j' instead.
   $j = jQuery.noConflict();
</script>
<script src="../js/prototype.js" language="javascript" type="text/javascript"> </script>

Проблема обсуждается здесь: http://randomous.com/forum/topic.php?id=916 (см. 2-й пост) и здесь: http://ejohn.org/blog/getelementsbyclassname-pre-prototype-16

По сути, Prototype создает document.getElementsByClassName в браузерах до этой функции (в настоящее время она изначально поддерживается большинством браузеров).

Однако jQuery также проверяет наличие document.getElementsByClassName и, когда находит его, предполагает, что он получает нативную реализацию; но на самом деле он получает реализацию прототипов, которая ведет себя не так, как ожидает jQuery.

Я пробовал МНОГО трюков, чтобы решить эту проблему, но ни один из них не работает. [попытка сообщить jQuery document.getElementsByClassName не определена, попытка помешать прототипу требовать document.getElementsByClassName и т. д.]

Приложение старое (следовательно, старый прототип) и, к сожалению, будет работать в основном на IE6 и IE7 (да, FML). Я пытаюсь использовать последнюю версию jQuery, так как именно там мне удобно, и мне нужно добавить в приложение множество сумасшедших элементов управления пользовательским интерфейсом - безумие перетаскивания выпадающего списка... в основном мне нужен jQuery.

Конечным результатом здесь является то, что я получаю ошибки каждый раз, когда использую селектор класса jQuery - $('.someClass')

Любые мысли здесь? Я думал, что неплохо разбираюсь в javascript, но это меня убивает.


person paulpooch    schedule 09.05.2011    source источник
comment
Можете ли вы показать код, который вы пробовали, и, возможно, сделать из него скрипку?   -  person Naftali aka Neal    schedule 09.05.2011


Ответы (2)


У меня была такая же проблема, когда вызывался селектор класса без какого-либо тега, например. $('.myClass') привел к ошибке, а $('div.myClass') работал нормально. Я заменил $('.myClass') на $('*.myClass') и все заработало

person zaplitny    schedule 13.01.2014