jQuery в браузере Opera User JS не работает

). Я играю с Opera User JS. Я включил «1jquery.min.js» в свою папку User JS (1 впереди, потому что Opera загружает их в алфавитном порядке). К сожалению, похоже, он не работает.

window.onload = OnWindowLoad;

$(document).ready(function()
{
  alert ($('#area_19'));
});

function OnWindowLoad ()
{
  alert ($('#area_19'));
  alert(document.getElementById("area_19"));
}

Что интересно в этом коде, так это то, что первые два предупреждения возвращаются со значением NULL, а последнее действительно находит объект! Таким образом, элемент определенно существует на странице, но мой jQuery, похоже, не может его получить. Что еще более странно, так это то, что функция jQuery "ready" работает, указывая на то, что у меня есть возможности jQuery.

Я весьма озадачен всем этим ::-/. Надеюсь, кто-нибудь может дать мне ключ к разгадке ::-).


person Axonn    schedule 14.05.2010    source источник


Ответы (1)


Я подозреваю, что вы запускаете скрипт на странице, которая использует другой JS-фреймворк, вероятно, Prototype.js.

Если бы Prototype был включен на целевую страницу, он перезаписал бы вашу jQuery-копию $ своей собственной, которая получает элемент по идентификатору, а не по селектору. Поскольку нет элемента с идентификатором #area_19 (# не является допустимым символом в идентификаторе), будет возвращено null. jQuery никогда не вернет null для несуществующего элемента, вы получите только пустой объект-оболочку.

(Код $(document).ready() все равно будет выполняться, потому что $ был вызван до включения Prototype и изменил поведение $.)

Попробуйте использовать явную функцию jQuery, а не ярлык $.

Такого рода помехи распространены при смешивании нескольких фреймворков или даже при смешивании двух копий/версий одного и того же фреймворка. Со стороны jQuery количество взаимодействий может быть уменьшено, но не устранено, с помощью noConflict. Лично для кода, такого как пользовательские скрипты, которым, возможно, придется жить в широком диапазоне контекстов, не контролируемых мной, я бы избегал использования широкомасштабных фреймворков, таких как jQuery.

person bobince    schedule 14.05.2010
comment
Это действительно был ответ. Большое спасибо, добрый господин! ::-). - person Axonn; 14.05.2010