В чем разница между $ и jQuery

#jquery

#jquery

Вопрос:

Когда я пытаюсь использовать $("#div_id") in $(document).ready , он возвращает NULL, но когда я использую jQuery("#div_id") , он возвращает фактический объект!

Почему это происходит?

ОБНОВЛЕНИЕ: я попробовал метод noConflict, не получив никаких подсказок.

 jQuery.noConflict()
function (a,b){return new c.fn.init(a,b)}

$.noConflict();
TypeError: Object function ()
    {
        return document.getElementById.apply(document, arguments)
    } has no method 'noConflict'
  

ОБНОВЛЕНИЕ 2:

 $(document).ready(function() {
    debugger;
});

<input type="text" id="test" name="test" value="123" />
  

Когда я запускаю следующий код в консоли, я получаю эти результаты:

 $("#test").val()
TypeError: Cannot call method 'val' of null
jQuery("#test").val()
"123"
  

Спасибо

Комментарии:

1. Похоже, firebug переопределяется $ на document.getElementById

2. Я загружаю страницу, не включая firebug, иногда она выдает сообщение об ошибке, указывающее, что элемент не найден. Но в других случаях это работает нормально

Ответ №1:

Смотрите jQuery.noConflict(). Могут ли другие библиотеки javascript на вашей странице использовать $ переменную?

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

Комментарии:

1. Когда именно ему присваивается псевдоним? Я попытался jQuery("#checkbox1") и #("#checkbox1") на новой html-странице без каких-либо плагинов, первый сработал как по волшебству, другой вернул NULL. Я использовал jQuery 1.5.2 для этого теста

2. @wael34218 хм … любопытно, мне нужно было бы увидеть несколько примеров кода, прежде чем я мог бы рискнуть предположить, что происходит. Можете ли вы опубликовать простую страницу, которая воспроизводит эту ошибку?

3. Я снова обновил сообщение, пожалуйста, ознакомьтесь с ним. Если я помещаю оповещения для отображения значения $ («#test») / jQuery («#test») вместо debugger, иногда это работает, иногда нет

4. Я сказал то же самое, но мой интервьюер, похоже, с этим не согласился. : (

Ответ №2:

$ и jQuery оба они одинаковы, за исключением того, что $ это просто псевдоним, jQuery который вы можете изменить или удалить с помощью jQuery.noConflict mode.

Комментарии:

1. Когда именно ему присваивается псевдоним? Я попытался использовать jQuery («#checkbox1») и # («#checkbox1») на новой html-странице без каких-либо плагинов, первый сработал как по волшебству, другой вернул NULL. Я использовал jQuery 1.5.2 для этого теста

2. Попробуйте $("#checkbox1") вместо #("#checkbox1")

3. lol это была ошибка опечатки в моем комментарии, она есть $("#checkbox1") в моем коде

Ответ №3:

$ также используется в Prototype.js, который представляет собой фреймворк javascript, подобный jQuery. Может быть так, что ваш проект также включает ссылки на этот фреймворк.

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

Вы можете заставить их работать вместе с оператором noConflict, как указано в других ответах. Мы делаем это в одном из наших проектов, который использует $ (элемент) для устаревшего кода прототипа и jQuery (элемент) для нового кода jQuery.

Комментарии:

1. Я вообще не использую prototype и не планирую этого делать. Идея в том, что я использую только jQuery и jQuery != $ … это меня смущает

2. Возможно, вы работали над устаревшим приложением с более старыми ссылками на другие фреймворки js. Если это не так, игнорируйте этот ответ =)

3. Я работал над очень старым кодом, который разрабатывался древними греками, когда я обнаружил это. Но когда я попробовал это на новом HTML-файле, который включает только jquery 1.5.2, возникла та же проблема.

4. Может ли это быть включено в одну из ваших мастер-страниц?

5. Нет, я так не думаю, я написал простую тестовую страницу html, и возникло то же поведение.

Ответ №4:

Похоже, что что-то заняло $, чтобы переназначить jQuery на $, попробуйте перейти:

 var $ = jQuery;
  

Ответ №5:

Может быть, у вас есть другая библиотека, которая использует $?

Комментарии:

1. Если вы взглянете на документацию noConflict по jQuery, api.jquery.com/jQuery.noConflict

2. Я не использую какую-либо библиотеку, которая могла бы ее переопределить

Ответ №6:

jQuery и $ одинаковы — смотрите исходный код jQuery:

 window.jQuery = window.$ = jQuery;
  

Возможно, вы используете другую библиотеку, которая использует переменную $, и тогда вам нужно решить конфликт именования.

 <script type="text/javascript">
  jQuery.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
  });
  // Code that uses other library's $ can follow here.
</script>
  

Или вы можете использовать один из следующих фрагментов (в его теле не будет конфликта $):

 // Method 1
jQuery(document).ready(function($){
    /* some code that uses jQuery $ */ 
});

// Method 2
(function($) {
    /* some code that uses jQuery $ */ 
})(jQuery);
  

Комментарии:

1. Я использую только jQuery без каких-либо других библиотек. Попробуйте, создайте простую HTML-страницу, требующую jQuery, и вы увидите разницу между $ и jQuery.