document.getElementsByClassName ломает селектор класса jQuery, вызванный переопределением прототипа - PullRequest
2 голосов
/ 09 мая 2011

Проблема возникает в IE6 (вероятно, все браузеры предварительно датируют document.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, и когда он его находит, он предполагает, что он получает собственную реализацию;но на самом деле он получает реализацию Prototypes, которая не ведет себя так, как ожидает jQuery.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 13 января 2014

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

0 голосов
/ 25 октября 2011

Этот ответ может показаться немного простым, но обновите прототип до последней версии. Они отказались от этого ужасного решения: http://www.prototypejs.org/api/utility/getElementsByClassName

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

Подделка родной функциональности должна считаться вредной. Я смотрю на тебя, прототип.

...