jQuery и вопросы о $

<div> элемент блочного уровня, и <span> встроенный элемент.

, Если Вы хотели сделать что-то с некоторым встроенным текстом, <span>, способ пойти, так как это не представит разрывы строки, которые <div> были бы.

<час>

, Как отмечено другими, существует некоторая семантика, подразумеваемая с каждым из них, старше значащий то, которое <div> подразумевает логическое подразделение в документе, сродни, возможно, разделу документа или чего-то, а-ля:

<div id="Chapter1">
   <p>Lorem ipsum dolor sit amet, <span id="SomeSpecialText1">consectetuer adipiscing</span> elit. Duis congue vehicula purus.</p>
   <p>Nam <span id="SomeSpecialText2">eget magna nec</span> sapien fringilla euismod. Donec hendrerit.</p> 
</div>
12
задан Emily 13 July 2009 в 23:33
поделиться

4 ответа

Пример 1:

Я думаю, вы пропустили какой-то код:

(function($) {

$(document).ready(function() {

    jQuery.fn.fixEmail = function() {
    {
   return $(this).each(function() {
       var $s = $(this);                  
           ...code...
        }
}
)(jQuery); //This line was missing in your code. 

Давайте немного перепишем этот код, чтобы понять, что происходит.

function complicatedFunction($) {
          // the document.ready call goes here.
}

Затем, как бы вы позвонили эта функция?

complicatedFunction(someObject);

Итак, внутри сложной функции $ ссылается на someObject . Согласны?

Если вы напишете

complicatedFunction(jQuery);

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

Возвращаясь к исходному коду, если мы решим не называть эту функцию, то есть сделать ее анонимной, вы можете визуализировать код, например,

(function($) { })(jQuery);

Вы создаете анонимную функцию, принимая один аргумент с именем $. Вы немедленно вызываете эту анонимную функцию, передавая ей объект jQuery. Таким образом, вы не изменяете глобальный объект $, но весь код внутри вашей анонимной функции работает так, как будто $ всегда доступен. Круто, не правда ли? :)

Пример 2:

jQuery(function(){
        var $ = jQuery;
        var cc = {
                mode : 'teaser',
                featureVisible : true,
                $loader : '<p class="loadingAnimation"><img height="32" src="' +
                                config.xoImgUrl +
                                '/images/ajax-loader.gif" width="32" /></p>',
                ....more code...
            }
});

Подобно примеру 1, я не видел такого стиля кодирования. (Я даже не уверен, сработает ли это)

В любом случае, внутри анонимной функции, которая передается в jQuery, вы локализуете использование $, не влияя на другой код. И да, они могли бы просто везде использовать объект jQuery, но это будет очень многословно, не так ли?

Пример 3:

var $ = {};

Выше строка определяет пустой объект и присваивает его переменной $.

Это то же, что и

var $ = new Object();

. Это похоже на то, как вы можете определить массив, используя два разных синтаксиса.

var items = [];  //same as var items = new Array();

Немного истории

Помните, в «$» нет ничего особенного. Это имя переменной, как и любое другое. Раньше люди писали код, используя document.getElementById. Поскольку JavaScript чувствителен к регистру, было нормально допустить ошибку при написании document.getElementById. Должен ли я заглавную букву «b» перед «by»? Следует ли использовать Id с заглавной буквы? Вы уловили дрейф. Поскольку функции в JavaScript являются первоклассными гражданами, вы всегда можете сделать это

var $ = document.getElementById; // свобода от document.getElementById!

Когда прибыла библиотека прототипов, они назвали свою функцию, которая получает элементы DOM, как «$». Практически все библиотеки JavaScript скопировали эту идею. Prototype также представил функцию $$ для выбора элементов с помощью селектора CSS.

jQuery также адаптировал функцию $, но расширил ее, чтобы она могла принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку «$» может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

Когда прибыла библиотека прототипов, они назвали свою функцию, которая получает элементы DOM, как «$». Практически все библиотеки JavaScript скопировали эту идею. Prototype также представил функцию $$ для выбора элементов с помощью селектора CSS.

jQuery также адаптировал функцию $, но расширил ее, чтобы она могла принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку «$» может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

Когда прибыла библиотека прототипов, они назвали свою функцию, которая получает элементы DOM, как «$». Практически все библиотеки JavaScript скопировали эту идею. Prototype также представил функцию $$ для выбора элементов с помощью селектора CSS.

jQuery также адаптировал функцию $, но расширил ее, чтобы она могла принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку «$» может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

который получает элементы DOM как '$'. Практически все библиотеки JavaScript скопировали эту идею. Prototype также представил функцию $$ для выбора элементов с помощью селектора CSS.

jQuery также адаптировал функцию $, но расширил ее, чтобы она могла принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку «$» может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

который получает элементы DOM как '$'. Практически все библиотеки JavaScript скопировали эту идею. Prototype также представил функцию $$ для выбора элементов с помощью селектора CSS.

jQuery также адаптировал функцию $, но расширил ее, чтобы она могла принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку «$» может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

Prototype также представил функцию $$ для выбора элементов с помощью селектора CSS.

jQuery также адаптировал функцию $, но расширил ее, чтобы она могла принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку «$» может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

Prototype также представил функцию $$ для выбора элементов с помощью селектора CSS.

jQuery также адаптировал функцию $, но расширил ее, чтобы она могла принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку «$» может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

Если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку '$' может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

Если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, поскольку '$' может относиться либо к реализации Prototype, либо к реализации jQuery. Вот почему в jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)

66
ответ дан 2 December 2019 в 02:53
поделиться

1

Вам не хватает кода в конце этого фрагмента? Обычно соглашение заключается в следующем:

jQuery.noConflict();

(function($){

$(document).ready(function() {

    jQuery.fn.fixEmail = function() {
    {
   return $(this).each(function() {
       var $s = $(this);                  
           ...code...
        }
}

})(jQuery);

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

2

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

3

Я бы, вероятно, реорганизовал их, чтобы использовать соглашение, подобное тому, которое я упоминал в №1. Я не уверен, почему они устанавливают $ равным объекту, но от него дурно пахнет.

4
ответ дан 2 December 2019 в 02:53
поделиться

Этот код имеет неприятный запах. Используют ли они другую библиотеку JavaScript?

  1. $ обычно является функцией JQuery, но я считаю, что Prototype также использует ее. Может быть, это код прототипа? 2: Вы правы. По крайней мере, я не могу придумать причину. 3: Это сбрасывает {} на новый объект. По сути, отмена JQuery
0
ответ дан 2 December 2019 в 02:53
поделиться

Я полагаю, вы видели это Использование jQuery с другими библиотеками JS ? Я думаю, что эта страница отвечает на ваши вопросы (см. Раздел «Магия ссылок - ярлыки для jQuery» внизу страницы).

Подводя итог:

  1. Передача $ - это способ использовать jQuery в функциональном блоке без его постоянной перезаписи.
  2. Пожалуй, я могу только сказать, что автор предпочел более сжатый $, а не jQuery.
  3. ] Это внутри другого блока? Опять же, для удобства, я думаю, они хотят повторно использовать $ для других целей, не перезаписывая его навсегда.

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

0
ответ дан 2 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: