Содействуйте IDE с помощью аннотаций Nullable/Nonnull
Для большинства баз кода полное отсутствие в передаче данных является утопией. Еще одним способом прояснить ваши намерения и одновременно помочь системе типов помочь вам — это использовать для параметров и возвращаемых значений аннотации, которые указывают, где стоит ожидать , а где нет, а также где его использование предполагается. Такую возможность предлагают рзаные фреймворки, но основная идея одна: параметр можно снабдить либо тегом , сообщая, что значение для него ожидать не нужно, либо , указывая обратное. Добавление тегов допустимо также для полей и возвращаемых значений.
Вот один из примеров подобной сигнатуры метода:
Сейчас эта сигнатура показывает, что метод не предполагает вызов с параметром , содержащим , и если такой вызов произойдет, IDE выдаст предупреждение. При этом мы также проинформированы, что данный метод может вернуть , и вы аналогичным образом получите предупреждение при использовании этого возвращаемого значения метода.
Если новым методам в возвращаемых значениях следует использовать вместо , то выполнение обширного рефакторинга существующих методов обычно в ходе разработки функционала не рассматривается. Тем не менее, когда вы пишите код, то простое добавление тега после каждой проверки, допускает ли значение , окажет помощь всем, кто будет использовать этот код в будущем, и поможет избежать NPE.
Создание
Представим, что каждое утро вы проверяете 50 последних логов за 14 часов журнала Application с помощью этой команды:
Команда не очень сложная, но в скором времени ее надоест писать. Для сокращения этой работы ее можно выделить в отдельную функцию:
Любая функция обязательно должна состоять из трех вещей:
- function — объявляет и говорит что после нее будет название;
- имя функции — название, по которому мы будем ее вызывать. В нашем случае имя Get-DayLog;
- скобки — обозначают начало и конец выражения.
После написания функции она вызывается по имени:
Учитывая, что нам может потребоваться получить данные не за последние 14 часов и более чем за 50 дней нам может потребуется изменить ее передав параметры.
Window
Window Object
alert()
atob()
blur()
btoa()
clearInterval()
clearTimeout()
close()
closed
confirm()
console
defaultStatus
document
focus()
frameElement
frames
history
getComputedStyle()
innerHeight
innerWidth
length
localStorage
location
matchMedia()
moveBy()
moveTo()
name
navigator
open()
opener
outerHeight
outerWidth
pageXOffset
pageYOffset
parent
print()
prompt()
resizeBy()
resizeTo()
screen
screenLeft
screenTop
screenX
screenY
scrollBy()
scrollTo()
scrollX
scrollY
sessionStorage
self
setInterval()
setTimeout()
status
stop()
top
Window History
back()
forward()
go()
length
Window Location
hash
host
hostname
href
origin
pathname
port
protocol
search
assign()
reload()
replace()
Window Navigator
appCodeName
appName
appVersion
cookieEnabled
geolocation
language
onLine
platform
product
userAgent
javaEnabled()
taintEnabled()
Window Screen
availHeight
availWidth
colorDepth
height
pixelDepth
width
10 ответов
Лучший ответ
Попробуйте это … не проверено. Я надеюсь, что это будет работать для вас.
Сделайте новый файл php. Вы можете использовать кнопки «назад» и «вперед», а число / метка времени на странице всегда обновляются.
Или
Нашел другое решение
Событие onload должно запускаться, когда пользователь нажимает кнопку «Назад». Элементы, не созданные с помощью JavaScript, сохранят свои значения. Я предлагаю сохранить резервную копию данных, используемых в динамически создаваемом элементе, в наборе INPUT TYPE = «hidden» для отображения: никто не загружает, используя значение ввода, чтобы восстановить динамические элементы так, как они были.
44
Gopal
3 Янв 2014 в 08:26
Более свежим решением является использование интерфейса PerformanceNavigation:
Где значение 2 означает «Доступ к странице осуществлялся путем перехода в историю».
Посмотреть поддержку браузера здесь:
32
Community
23 Май 2017 в 12:10
Это простое решение размещено здесь Принудительное обновление страницы при нажатии кнопки назад работал …
8
bummi
20 Май 2015 в 09:56
Вы можете использовать следующее, чтобы обновить страницу, нажав кнопку «Назад»:
1
Grant Miller
31 Авг 2018 в 01:42
Прежде всего вставьте поле в ваш код:
Затем запустите jQuery:
1
Bharanikumar
17 Май 2016 в 13:05
Ты пробовал что-то подобное? не испытано…
2
reyaner
3 Янв 2014 в 08:26
Гм у_у
Как я уже говорил, кнопка «Назад» для каждого из нас является болью в каком-то месте … которая говорит …
Пока вы загружаете страницу нормально, это создает много проблем … для стандартного «сайта» это не изменится так сильно … однако я думаю, что вы можете сделать что-то вроде этого
Пользователь каждый раз получает доступ к вашей странице .php, который выбирает, что загружать. Вы можете попытаться немного поработать с кешем (чтобы не кешировать страницу) и, возможно, срок действия.
Но долгосрочное решение будет помещать код в событие «onload» для извлечения данных, связанных с Ajax, таким образом, вы можете (с помощью Javascript) запустить нужный код и, например, обновить страницу.
-4
Goikiu
3 Янв 2014 в 08:21
Решение для скрытого ввода у меня не работает в Safari. Приведенное ниже решение работает и пришло из здесь.
15
Community
23 Май 2017 в 12:18
Я нашел два способа справиться с этим. Выберите лучшее для вашего случая. Решения, протестированные на Firefox 53 и Safari 10.1
1 . Определите, использует ли пользователь кнопку «назад / вперед», затем перезагрузите всю страницу
2 . перезагрузить всю страницу, если страница кэширована
10
Javan R.
8 Июн 2017 в 12:43
Window.onbeforeunload = function () {redirect (window.history.back (1)); } ;
Agustin Gandara
9 Июн 2016 в 14:52
JavaScript
JS Array
concat()
constructor
copyWithin()
entries()
every()
fill()
filter()
find()
findIndex()
forEach()
from()
includes()
indexOf()
isArray()
join()
keys()
length
lastIndexOf()
map()
pop()
prototype
push()
reduce()
reduceRight()
reverse()
shift()
slice()
some()
sort()
splice()
toString()
unshift()
valueOf()
JS Boolean
constructor
prototype
toString()
valueOf()
JS Classes
constructor()
extends
static
super
JS Date
constructor
getDate()
getDay()
getFullYear()
getHours()
getMilliseconds()
getMinutes()
getMonth()
getSeconds()
getTime()
getTimezoneOffset()
getUTCDate()
getUTCDay()
getUTCFullYear()
getUTCHours()
getUTCMilliseconds()
getUTCMinutes()
getUTCMonth()
getUTCSeconds()
now()
parse()
prototype
setDate()
setFullYear()
setHours()
setMilliseconds()
setMinutes()
setMonth()
setSeconds()
setTime()
setUTCDate()
setUTCFullYear()
setUTCHours()
setUTCMilliseconds()
setUTCMinutes()
setUTCMonth()
setUTCSeconds()
toDateString()
toISOString()
toJSON()
toLocaleDateString()
toLocaleTimeString()
toLocaleString()
toString()
toTimeString()
toUTCString()
UTC()
valueOf()
JS Error
name
message
JS Global
decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent()
escape()
eval()
Infinity
isFinite()
isNaN()
NaN
Number()
parseFloat()
parseInt()
String()
undefined
unescape()
JS JSON
parse()
stringify()
JS Math
abs()
acos()
acosh()
asin()
asinh()
atan()
atan2()
atanh()
cbrt()
ceil()
clz32()
cos()
cosh()
E
exp()
expm1()
floor()
fround()
LN2
LN10
log()
log10()
log1p()
log2()
LOG2E
LOG10E
max()
min()
PI
pow()
random()
round()
sign()
sin()
sinh()
sqrt()
SQRT1_2
SQRT2
tan()
tanh()
trunc()
JS Number
constructor
isFinite()
isInteger()
isNaN()
isSafeInteger()
MAX_VALUE
MIN_VALUE
NEGATIVE_INFINITY
NaN
POSITIVE_INFINITY
prototype
toExponential()
toFixed()
toLocaleString()
toPrecision()
toString()
valueOf()
JS OperatorsJS RegExp
Modifiers:
g
i
m
Groups:
(x|y)
Metacharacters:
.
\w
\W
\d
\D
\s
\S
\b
\B
\0
\n
\f
\r
\t
\v
\xxx
\xdd
\uxxxx
Quantifiers:
+
*
?
{X}
{X,Y}
{X,}
$
^
?=
?!
Properties:
constructor
global
ignoreCase
lastIndex
multiline
source
Methods:
compile()
exec()
test()
toString()
JS Statements
break
class
continue
debugger
do…while
for
for…in
for…of
function
if…else
return
switch
throw
try…catch
var
while
JS String
charAt()
charCodeAt()
concat()
constructor
endsWith()
fromCharCode()
includes()
indexOf()
lastIndexOf()
length
localeCompare()
match()
prototype
repeat()
replace()
search()
slice()
split()
startsWith()
substr()
substring()
toLocaleLowerCase()
toLocaleUpperCase()
toLowerCase()
toString()
toUpperCase()
trim()
valueOf()
Передача через конвейер или Pipeline
Вы наверняка работали через команды Powershell, которые позволяли использовать конвейер следующим образом:
Если мы захотим использовать подход описанный выше, создав новые команды в виде функций, то конвейер не будет работать:
Выполнив следующую команду мы сможем увидеть, что значения, которые могут приниматься через конвейер помечаются специальным атрибутом:
Таких атрибутов всего два:
- ValueFromPipelineByPropertyName — получение значения из конвейера по имени;
- ValueFromPipeline — получение через конвейер только значения .
Кроме этого, внутри нашей функции, мы должны добавить специальный блок Process. Наш скрипт в итоге будет выглядеть так:
— атрибут расширения функции, который добавляет некоторые возможности в функции позволяя им работать как команду.
Если бы мы не указали блок Process функция бы вернула только последней результат из массива 1..5:
Если наши команды будут иметь критический характер, такой как удаление, или через конвейер может передаваться несколько значений, то стоит использовать атрибут ValueFromPipelineByPropertyName. Таким образом мы исключим попадания через конвейер случайного значения. На примере ниже я изменил
Как уже писалось ValueFromPipelineByPropertyName принимает только именованные параметры и в случае с именем «bad» мы получаем ошибку:
- Не удается привязать объект ввода к любым параметрам команды, так как команда не принимает входные данные конвейера
- The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
Причем передавать именованные параметры через хэш таблицы мы не можем, только через pscustomobject.
Вы можете указывать сразу два атрибута таким образом:
Это позволит использовать и значение с именем, если оно указано либо без него. Это не спасет вас от ситуации, если вы передаете параметр с другим именем:
Передача через конвейер нескольких значений
Для примера рассмотрим ситуацию, где нам нужно передать через конвейер два значения. Если Get-SomeNum будет возвращать массив, то через конвейер у нас будет проходить каждое число по отдельности. Это еще один повод использовать именованные параметры:
Как подключить jQuery с CDN
CDN (Content Delivery Network) – это технология, которая позволяет увеличить скорость доставки контента конечным пользователям.
Состоит она из большого количества серверов, географически расположенных в разных точках мира, на каждом из которых располагается кэш контента. При этом его доставка конечному пользователю осуществляется обычно с того сервера, который ближе других расположен к нему. В результате чего сокращается время его загрузки, ускоряется отклик, увеличивается производительность сайта, а также снижается нагрузка на оригинальный сервер.
Т.е. CDN предоставляет ещё один способ подключить библиотеку jQuery. При этом непосредственно загружать его себе на сервер не нужно, он будет браться с CDN.
Загрузку jQuery с CDN предоставляют множество компаний, например, таких как Google, Microsoft, Cloudflare, jQuery, Yandex и т.д.
Подключить jQuery с CDN очень просто. Для этого нужно вставить с атрибутом , в котором прописать путь до этой библиотеки.
Код для онлайн подключения jQuery последней версии (3.5.1) с Google CDN:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
Если нужна не эта, а какая-то другая версия, то тогда следует перейти страницу и выбрать её.
Например, ссылка для подключения версии из ветки 1.x (1.12.4):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Google CDN для последней версии из ветки 2.x (2.2.4):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
Другие популярные CDN
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.5.1.min.js"></script>
jQuery CDN:
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
Cloudflare CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
Yandex CDN (последняя опубликованная версия 3.3.1):
<script src="https://yastatic.net/jquery/3.3.1/jquery.min.js"></script>
Дополнительно можно отметить, что если множество сайтов используют один и тот-же URL для подключения jQuery с CDN, то браузеру не потребуется загружать его для каждого такого ресурса. После первого скачивания он поместить jQuery в кэш и при последующих запросах будет брать её уже оттуда.
Возвращайте Optional вместо null
Хоть в предыдущей статье я и убеждал вас в уместности для некоторых сценариев, в этой я буду напротив говорить, что по возможности его все же лучше избегать. При каждом добавлении в базу кода нового метода, способного вернуть пустое значение, вам следует стараться использовать вместо null тип Optional. Этот тип был введен, чтобы разработчики могли указывать на возможность возвращения методом пустого значения, что ранее было недоступно (либо требовало аннотаций, о которых я расскажу ниже). Существует два вида объектов : содержащие значение и без него. Первые изначально создаются со значением, вторые же просто являются статическими одиночками. Структурно типичный случай их использования выглядит так:
Чтобы увидеть, почему сигнатура с предпочтительней, представьте следующий метод:
Из этой сигнатуры понятно лишь, что она возвращает объект типа . При этом, как уже говорилось, соответствует любому типу. У нас нет иной возможности узнать, возвращает ли данный метод , кроме как проанализировать его реализацию. В противоположность приведенному примеру, метод, возвращающий , будет выглядеть так:
Поскольку смысл использовать есть только в случае возможного возврата пустого значения, значит метод такое значение вернуть может. Поэтому при каждом возвращении методом вы знаете, что есть вероятность получения пустого значения и его нужно должным образом обработать.
Возвращаемое значение обрабатывается аналогично : вы проверяете, передано ли значение, и, если да — выполняете с ним определенные действия. Вызов метода, возвращающего , как правило, выглядит так:
Со значением соответствующий код будет выглядеть так:
В то время как можно легко забыть выполнить проверку на в первом примере, тип безопаснее и делает очевидным возможное отсутствие возвращаемого значения. Если вы вызовите для пустого значения , то получите исключение, как и в случае вызова любого метода для значения . В самых простых случаях перед вызовом всегда нужно вызывать , однако API предлагает и другие альтернативы, где при отсутствии значения может возвращаться его предустановленный вариант.
Обратите внимание, что тип резонно использовать только для возвращаемых значений. Например, в примере ниже присваивание в цикле ничем не лучше
На деле использование для начального присваивания будет даже более изящным, и у вашей IDE не должно возникнуть сложностей в обнаружении упущенной проверки на , когда переменная используется в том же методе, где была объявлена.
Однако если бы вместо этого у нас был метод, возвращающий активную госпитализацию, то предпочтительнее было бы использовать :
Можно ли использовать для параметров?
SonarLint отвечает “Нет”, поскольку лучше предоставить действительное значение, чем , которое может его иметь или нет. Ведь иначе нам придется проверять в методе оба случая, а также убеждаться, что никто не передал вместо него null. Смешивать же и вообще не стоит, иначе смысл в использовании последнего полностью исчезнет.
Никогда не делайте следующее, равно как не предоставляйте в качестве аргумента параметра с значением:
Если вы сделаете нечто подобное, то также получите NPE (исключение нулевого указателя).
Если у вас есть некое значение, которое, вероятно, содержит , и вы хотите преобразовать его в , то вам нужно вызвать вместо этого , который вернет обернутое в значение, если аргумент не является . В противном случае он вернет пустой . Если же вам нужно выполнить обратную операцию, т.е. преобразовать, вероятно, пустое значение в или значение, которое оно содержит, используйте , который при отсутствии значения возвращает предоставленный аргумент.
Поддерживаемые алгориты
Справа приведен список алгоритмов, поддерживаемых программой майнинга T-Rex (майнер). Для каждого из алгоритмов показана комиссия программы. Эта комиссия обычно не превышает нескольких процентов и используется разработчиками майнера для поддержания и улучшения его работы, а также для добавления новых функций. Комиссия берется из-за того, что программа каждый час за короткий промежуток времени (обычно не более минуты) переводит деньги на кошелек разработчика.
Алгоритм | Комиссия, % |
---|---|
Ethash | 1.0 |
Etchash | 1.0 |
Octopus | 2.0 |
Kawpow | 1.0 |
Mtp | 1.0 |
Mtp-tcr | 1.0 |
Multi | 1.5 |
Progpow | 1.0 |
Progpowz | 1.0 |
Progpow-veriblock | 1.0 |
Progpow-veil | 1.0 |
Tensority | 1.0 |
Работа со строками
Я часто вижу баги там, где логике при генерации строк не удается учесть нулевые значения, в результате чего среди строк пользовательского интерфейса появляется . Причина такого коварного поведения в том, что в Java при конкатенации строк неожиданное нулевое значение не ведет к NPE до тех пор, пока для него явно не вызываются методы. Если мы заглянем внутрь JRE, то выясним, что null-значения часто явно обрабатываются и преобразуются в — значения. Каждый раз, когда мы используем сокращение “”, генерируется и используется для создания объединенного значения. Это означает, что правосторонние значения присваиваний и по факту эквивалентны:
В обоих случаях получится строка . Конкатенацию также можно выполнить при помощи , и это, что интересно, будет вызывать NPE всякий раз, когда будет . Тем не менее метод concat не является предпочтительным несмотря на то, что справляется лучше при конкатенации всего нескольких строк. В связи с этим мы, как правило, будем обнаруживать -строки лишь в UI.
Используйте класс Objects и библиотеку StringUtils
Ошибки нередко прокрадываются в базу кода, когда у нас нет ясного понимания того, что код делает или почему он это делает
Здесь важно удобство в обслуживании. Я часто сталкиваюсь с запутанным кодом создания строки
По какой-то причине люди склонны увлекаться тернарными выражениями, помещая их в другие выражения или вкладывая друг в друга. Это очень эффективно усложняет чтение и понимание простой логики.
Тернарный оператор часто используется для возвращения предустановленного значения, когда переменная содержит . Ниже приведен пример этого, взятый прямо из нашей базы кода Columna:
Примечательно, что это не самый сложный для анализа код, но я думаю, что его можно написать гораздо лучше. В C# существует так называемый оператор объединения с неопределенным значением, относящийся к тернарному оператору, явно проверяющему значение на . Вот пример:
Здесь левое значение оператора присваивается, если оно не , в противном случае используется правая сторона. Несмотря на то, что в Java недостает подобного оператора, с той же целью можно использовать встроенный класс , описанный выше. Метод класса возвращает значение первого объекта, если этот объект не , в противном случае он возвращает указанное строковое значение.
Не так складно, как в примере с C#, но, на мой взгляд, намного надежнее, чем исходный пример, а значит и шанс появления ошибок при работе с кодом уже существенно меньше.
Используйте StringUtils для защиты String-методов от null
Библиотека StringUtils упрощает обработку и пустых строк. В API это описывается как: “Защищенные от null операции со String.” Эта библиотека содержит много стандартных строковых операций со встроенными проверками на . При ее использовании база кода станет менее громоздкой, так как вам не потребуется реализовывать весь рутинный код проверок на , и читать условные выражения станет легче
При этом база кода также станет более единообразной, и что более важно, код станет безопаснее, так как вы уже ненароком не забудете реализовать проверки нулевых значений. В частности, такая агрессивная защита выражений конкатенации с условными инструкциями на основе метода гарантирует, что в строки уже не проскользнут нежелательные “null”-значения
Тонкая настройка графического процессора (только для Windows)
Все параметры можно задать в виде списка, разделенного запятыми, чтобы применить к ним разные значения.
разные карты. (значение по умолчанию для всех опций: 0 — не используется)
Устанавливает скорость вращения вентилятора графического процессора в процентах или целевую температуру (автоматический вентилятор).
Допустимые форматы:
(где N — скорость вентилятора)
(где N — заданная температура)
Пример:
GPU # 0: установите скорость вращения вентилятора на 45%
Графический процессор # 1: поддерживайте температуру ядра графического процессора на уровне 67 ° C
Примечание: скорость вращения вентилятора ограничена диапазоном в режиме автоматического вентилятора.
Устанавливает ограничение мощности графического процессора в процентах. Должен быть в диапазоне .
Устанавливает смещение тактовой частоты ядра GPU в МГц.
Требуется запустить майнер с правами администратора.
Будет установлено значение 0 при выходе и во время восстановления DAG.
Устанавливает смещение тактовой частоты памяти графического процессора в МГц.
Требуется запустить майнер с правами администратора.
Будет установлено значение 0 при выходе и во время восстановления DAG.
Устанавливает напряжение ядра GPU в процентах. Должен быть в диапазоне .
Используйте его только в том случае, если знаете, что делаете!
Требуется запустить майнер с правами администратора.
Определяет желаемое напряжение ядра GPU в мВ. (по умолчанию: 0 — отключено).
Требуется запустить майнер с правами администратора.
Устанавливает P-состояние графического процессора. Допустимые значения: p0.
Требуется запустить майнер с правами администратора.
Показать информацию о версии и выйти.
Показать этот текст справки и выйти.
Что можно делать с jQuery
jQuery позволяет очень легко:
- выбирать элементы для выполнения различных манипуляций над ними;
- создавать различные визуальные эффекты (например, плавное отображение и скрытие элементов);
- создавать сложную анимацию, при этом реализовывая это за гораздо меньшее количество строк кода чем на чистом JavaScript;
- манипулировать DOM элементами и их атрибутами;
- реализовывать AJAX для асинхронного обмена данными между клиентом и сервером;
- перемещаться от текущего узла к другим по иерархической структуре DOM дерева;
- выполнять несколько действий над элементом посредством одной строчки кода;
- получать или устанавливать размеры HTML элементам и т.д.
Этот список можно продолжить дальше, т.к. jQuery содержит большое количество функций, которые значительно упрощают написание кода для решения различных задач, стоящих перед веб-разработчиками.
Функциональный подход: каррирование
Концепция каррирования довольно проста — вместо одной функции, которая принимает несколько параметров
У вас есть функция, которая принимает один параметр, которая возвращает функцию, которая принимает второй параметр, которая возвращает другую функцию и т. д., пока все параметры не будут удовлетворены, после чего будет выполнена полная функция.
Во многих отношениях это функциональный эквивалент шаблона OO Builder.
Таким образом, вы можете пропустить второй и третий параметр, не указав их, и получите значения по умолчанию. Кроме того, он намного короче строителя. Однако чтение функции может быть немного странным.
Что такое jQuery и её поддержка браузерами
jQuery — это быстрая, лёгкая и многофункциональная JavaScript библиотека, основанная на принципе «пиши меньше, делай больше».
Её создал Джон Резиг в начале 2006 года. В настоящее время jQuery разрабатывается и поддерживается распределенной группой разработчиков как проект с открытым исходным кодом.
Сейчас последней версией jQuery является 3.5.1. Она поддерживается во всех основных браузерах: Chrome, Firefox, Safari, Edge, Opera и Internet Explorer 9+.
Преимущества и недостатки jQuery
Преимущества, которые даёт нам библиотеки jQuery при её использовании для написания клиентских сценариев:
- компактность кода. Позволяет писать код более компактно чем на чистом javaScript, т.е. за гораздо меньшее количество строк кода.
- простой и понятный синтаксис. Значительно упрощает написание многих вещей, например, таких как манипулирование DOM элементами, обработку событий, добавление эффектов анимации на страницу, AJAX запросов и т.д.
- кроссбраузерность. Код написанный на jQuery будет гарантированно работать во всех основных браузерах. В то время как код, написанный на чистом JavaScript надо будет однозначно проверять во всех браузерах. Т.к. некоторые фрагменты кода могут не поддерживаться и их реализацию для этих браузеров нужно будет выполнять как-то по-другому, или например, использовать полифиллы.
- открытый код. Библиотека jQuery является полностью бесплатной как для личных, так и для коммерческих проектов.
Кроме преимуществ, приведённых выше, у библиотеки jQuery имеются конечно и недостатки.
К недостаткам jQuery можно отнести то, что она может немного увеличивать скорость загрузки веб-страницы (её сжатый размер составляет около 30КБ), а также немного снижать производительность выполнения кода, чем если он был бы написан на чистом JavaScript.
Статистика использования jQuery
Если перейти к статистике, то многие крупные компании, используют jQuery в своих приложениях и сайтах. При этом растущий тренд продолжается, несмотря на очень горячие дискуссии в ИТ сообществах на тему: «Стоит ли использовать jQuery или нет в 2021 году?»
Статистика использования jQuery 10k крупнейшими сайтами:
6 ответов
Лучший ответ
Что ж, полностраничный запрос противоречит цели AJAX,
Но если вы настаиваете :), вы можете использовать огромный div в качестве заполнителя вашей страницы и использовать jQuery Load / Ajax
Div будет выглядеть так
И функция, которую вы можете использовать
Либо вручную добавьте функцию в свою ссылку
Или используйте селектор jQuery для перебора каждого якоря
4
Meep3D
29 Май 2014 в 09:16
Похоже, вы пытаетесь использовать jQuery, потому что кто-то сказал вам, что вы должны использовать jQuery — тег ссылки выполняет эту работу сам по себе, без каких-либо скриптов.
Хорошо — мы должны делать то, что говорят нам наши подруги …
Я полагаю, вы могли бы сделать что-то вроде этого:
Или
(это вообще сработает ??)
2
Ray
8 Янв 2010 в 15:30
Просто сделайте ссылку, указывающую туда:
Ps: Я немного сбит с толку … у вас уже есть ссылка на эту страницу, которая вызывает новый запрос (полное обновление страницы), мне интересно, зачем нужен AJAX …
1
Jan Hančič
8 Янв 2010 в 13:50
Поскольку другая страница находится в том же домене, вы можете очистить другую страницу, чтобы получить интересующие вас данные. Вы даже можете заменить весь тег тела текущей страницы содержимым тега тела на другой странице.
Процесс будет выглядеть примерно так: пользователь выполняет какое-то действие на текущей странице, чтобы вызвать желаемое действие, JavaScript делает запрос AJAX для получения somepage.html и сохраняет результат в строке, JavaScript выполняет эквивалент innerHTML (или jQuery.html ()) для замените содержимое текущей страницы (или div или чего-то еще) тем, что было получено из somepage.html, и добавьте специальный эффект.
Теоретически это позволит вам полностью заменить содержимое текущей страницы тем, что было извлечено из somepage.html.
1
Jeremy Bandini
8 Янв 2010 в 14:35
Cuga
30 Сен 2010 в 04:06
Используйте FAJAX (поддельный AJAX). Это даст вам ту «крутость», которую вы ищете. Использование этих метатегов на ваших страницах приведет к полному обновлению страницы с эффектами постепенного появления и исчезновения.
Мета-теги работают только в IE, но есть способы получить аналогичные результаты в других браузерах с помощью JavaScript.
2
Alpha Codemonkey
9 Янв 2010 в 22:18
Добавление событий к динамически созданным объектам
Для того чтобы повесить событие на элемент, которого ещё нет, можно использовать следующую конструкцию функции :
$(document).on(eventName, selector, handler); // document или любой другой существующий родительский элемент // eventName - имя события // selector - селектор, осуществляющий фильтрацию потомков, для которых необходимо запустить обработчик события // handler - обработчик события
Это действие можно осуществить благодаря тому, что событие всплывает, и, следовательно, возникает у всех предков этого элемента. А объект, до которого всплывают все события на странице, является . Поэтому в большинстве случаев выбирают именно его. После этого зная селектор, функция может программно отобрать среди элементов (элемента, который вызвал это событие () и всех его предков включая родителя) те, которые соответствуют ему. И затем для всех отобранных элементов выполнить указанный в функции обработчик. Действия, посредством которых обработка события переносится на другой элемент (предок), называется в jQuery ещё процессом делегирования события.
Например, добавим событие к элементу, которого ещё нет на странице:
<button id="addButton" type="button">Добавить кнопку</button> <script> // при нажатии на элемент с id="addButton" добавить в начало страницы новую кнопку $('#addButton').on('click', function(e) { $('body').prepend('<button class="deleteMe" type="button">Удалить меня</button>'); }); // добавить событие click, которое будет выполнено для элементов, которых ещё нет на странице $(document).on('click','.deleteMe', function() { $(this).remove(); }); </script>
Делегирование может применяться не только для обработки событий динамически созданных объектов, но и для того чтобы не привязывать к каждому элементу (если их на странице может быть очень много) обработчик.
$(document).on('click','#comment a',function(e) { if(!(location.hostname === this.hostname || !this.hostname.length)) { e.preventDefault(); location.href='away?link='+encodeURIComponent($(this).attr('href')); } });