JQuery в Opera User JS не работает - PullRequest
1 голос
/ 14 мая 2010

). Я играю с некоторыми из 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.

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

1 Ответ

2 голосов
/ 14 мая 2010

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

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

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

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

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

...