<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>
Пример 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, и медленно переносить ваш код. Я считаю, что это был блестящий ход со стороны Джона! :)Вам не хватает кода в конце этого фрагмента? Обычно соглашение заключается в следующем:
jQuery.noConflict();
(function($){
$(document).ready(function() {
jQuery.fn.fixEmail = function() {
{
return $(this).each(function() {
var $s = $(this);
...code...
}
}
})(jQuery);
Обратите внимание, что внизу jQuery передается как параметр в выражение функции, поэтому $ равно jQuery, но только внутри этого выражения функции.
Они могли бы использовать jQuery, но они, вероятно, полагаются на код копирования / вставки, который использует $.
Я бы, вероятно, реорганизовал их, чтобы использовать соглашение, подобное тому, которое я упоминал в №1. Я не уверен, почему они устанавливают $ равным объекту, но от него дурно пахнет.
Этот код имеет неприятный запах. Используют ли они другую библиотеку JavaScript?
Я полагаю, вы видели это Использование jQuery с другими библиотеками JS ? Я думаю, что эта страница отвечает на ваши вопросы (см. Раздел «Магия ссылок - ярлыки для jQuery» внизу страницы).
Подводя итог:
Использование различных механизмов предотвращения конфликтов немного непоследовательно в опубликованном вами коде, поэтому вы можете захотеть провести рефакторинг, если сможете к.