Целью практического занятия является формирование начальных навыков работы с localStorage.
Реализовать функционал блокнота (создание записей, хранение записей, редактирование и удаление) с использованием:
localStorage;sessionStorage.В качестве примера, мы подробно рассмотрим схематичный пример по работе с хранилищами данных на стороне клиента, а именно с localStorage. Вариант задания по реализации аналогичного функционала средствами sessionStorage остается на самостоятельное выполнение.
С теорией, касающейся работы с localStorage можно ознакомиться в лекции № 15 настоящего курса.
Выделим задачи, которые необходимо выполнить в рамках задания:
Для начала условимся, что запись блокнота представляет собой пару значений {наименование записи, текст записи}.
Нам понадобится HTML - документ со следующей структурой:
(рис 19.1) Макет внешнего вида HTML - документа
Список записей будет представлять собой нумерованный набор гиперссылок - наименований существующих записей.
Также нам понадобятся два поля для ввода значений Наименования и Текста записи, а также две кнопки - Сохранить и Удалить.
Создадим HTML - разметку для нашей веб - страницы, сразу же укажем атрибуты id и class, для упрощения стилизации ряда элементов, а также наименования JavaScript - функций, там, где это необходимо:
<body onload="listLoad();">
<div id="header">
<h1>Пример работы с localStorage</h1>
</div>
<div id="notes">
<h3> Список записей</h3>
<ol id="notelist"></ol>
</div>
<div id="note">
<form id="formnote">
<fieldset>
<table>
<tr>
<td><label class="notefield">Наименование
</label></td>
<td colspan=2>
<input id="notename" type="text"
class="notefield"></input>
</td>
</tr>
<tr>
<td><label class="notefield">Текст записи
</label></td>
<td colspan=2>
<textarea id="notecontent" rows=10></textarea>
</td>
</tr>
<tr>
<td></td>
<td class="notebtn"><button id="save"
type="submit" onclick="saveNote(); "
>Сохранить</button></td>
<td class="notebtn"><button id="delete"
type="submit" onclick="deleteNote();"
>Удалить</button></td>
</tr>
</table>
</fieldset>
</form>
</div>
<div id="footer">
<p class="footertext">2012 г.</p>
</div>
</body>
В браузере ознакомимся с результатом:
(рис 19.2) Результат выполенния шага 1
Отметим, что нами уже заранее указаны имена функций, а именно:
listLoad() – функция формирующая список записей, при загрузке веб - страницы;saveNote() – функция сохранения записи в localStorage;deleteNote() – функция localStorage.Детально функции будут рассмотрены нами на шаге 3.
Чтобы страница смотрелась, создадим файл стилей и "привяжем" его к HTML - документу.
Для начала зададим
body
{
background-color:#F7F7F7;
}
Определим выравнивание и размещение контейнера, где будет размещаться список записей:
#notes
{
float:left;
width:250px;
}
Выровняем контейнер с элементами управления
#note
{
float:left;
margin-left:20px;
}
Зададим размещение и атрибуты стиля текста для контейнера :
#footer
{
clear:left;
text-align:center;
font-style:italic;
}
Зададим отступ для формы с
#formnote
{
margin-top: 30px;
}
Несколько мелких правок для заголовков, текстовых полей, кнопок и ячеек таблицы:
#formnote
{
margin-top: 30px;
}
#notecontent, #notename
{
width:450px;
}
.notebtn
{
text-align:center;
}
td
{
vertical-align:top;
}
h1, h3
{
font-style:italic;
text-align:center;
Зададим рамку вокруг fieldset'а:
fieldset
{
border:1px dashed #CCC;
padding:10px;
Немного больше внимания, чем остальным элементам, уделим надписям и формам ввода текста:
label
{
width:142px;
height:32px;
background-color:#CCCCCC;
float:left;
display: block;
font-family:Arial, Helvetica, sans-serif;
font-size: 100%;
letter-spacing: -1px;
font-weight: normal;
line-height: 1.1;
color:#666;
}
.notefield
{
margin-top:3px;
margin-right:2px;
padding-top:11px;
padding-left:6px;
height:32px;
}
И наконец, для того, чтобы ссылки списка выделялись при наведении на них курсора, и чтобы текст шрифт отличался от обычного синего с подчеркивание, определим селекторы соответствующих
a:link, a:visited
{
color:#666;
font-style:italic;
font-weight:500;
text-decoration:none;
font-family:Arial, Helvetica, sans-serif;
}
a:hover, li:hover
{
color:#666;
font-style:italic;
font-weight:bolder;
cursor: pointer;
Результатом станет веб - страница следующего вида:
(рис 19.3) Результат выполнения шага 2
Собственно, теперь можно перейти к сути работы с localStorage.
Нами уже были перечислены необходимые функции. Рассмотрим подробнее создание каждой из них.
Сохранение новой записи:
function saveNote()
{
var name = document.getElementById('notename').value;
/* создание переменной, хранящей значение введенное в поле Наименование.*/
var content = document.getElementById('notecontent').value;
/* создание переменной для хранения текста самой записи*/
if(content == '')
{
alert('enter valid note text');
/* выводим предупреждающее сообщение, в случае, если не задан текст записи, см. рис. 4*/
}
else
{
if (name == 0)
{
alert('enter valid note name');
/* выводим предупреждающее сообщение, если не задано наименование записи, см. рис. 5*/
}
else {localStorage[name] = content;}
/* создание записи в localStorage, обратите внимание, что наименование
записи является идентификатором, по которому сможем извлечь текст записи*/
/*Также отметим, что если пользователь выберет уже существующую запись и введет
новый текст, без изменения наименования, то, по сути, произойдет редактирование
записи, поскольку новое значение текста сохранится поверх старого, соответственно,
если будет изменено наименование записи, то, фактически, произойдет создание новой*/
}
(рис 19.4) Сообщение о некорректном значении текста записи
(рис 19.5) Сообщение о некорректном значении наименования записи
Теперь, рассмотрим функцию формирования списка записей:
function listLoad()
{
var list = document.getElementById('notelist');
/* получаем доступ к элементу - списку нашей веб - страницы*/
for(var i in localStorage)
/* цикл для перебора каждого значения, сохраненного в localStorage,
при этом i, принимает значение идентификатора хранимых данных, т.е., в нашем
примере, переменная i содержит наименование записи*/
{
var a = document.createElement('a'); /* создаем новый html - */
a.setAttribute('onclick', "loadNote('"+i+"'); return false;");
/*определяем атрибут onclick, при клике, в нашем случае, вызовется функция
loadNote с параметром Наименования записи*/
a.innerText = i;
/* задаем значение текста ссылки эквивалентным наименованию записи*/
var element = document.createElement('li');
/* создаем новый html - элемент, а именно пункт списка*/
element.appendChild(a);
/* добавляем пункту списка дочерний элемент – ссылку*/
list.appendChild(element);
/* добавляем списку дочерний элемент – пункт списка*/
}
В листинге 19.11 задаются параметры вызова функции загрузки записи по клику на ссылке, рассмотрим эту функцию:
function loadNote(v)
{
document.getElementById('notecontent').value = localStorage[v];
/*выводим в текстовое поле текст записи*/
document.getElementById('notename').value = v;
/* выводим в поле наименование записи*/
}
Осталось только написать функцию для
function deleteNote()
{
var name = document.getElementById('notename').value;
/*получаем значение наименования текущей записи из текстового поля*/
if (name != '')
{
localStorage.removeItem(name);
/*удаление записи, в качестве идентификатора записи используется ее наименование*/
}
else {alert('note not found');}
/* сообщение, выдаваемое при попытке удалить неопределенную запись*/
}
Задание можно считать выполненным.
Результат выполнения заданий представлен на рисунках 19.6 - 19.9 .
(рис 19.6) Создание записи
(рис 19.7) Результат сохранения записи 1
(рис 19.8) Создано несколько записей, в том числе запись 3 для удаления
(рис 19.9) Результат удаления записи 3
С дополнительными материалами по теме можно ознакомиться в списке материалов для самостоятельного изучения лекции №15.
Целью практического занятия является формирование начальных навыков работы с localStorage.
Реализовать функционал блокнота (создание записей, хранение записей, редактирование и удаление) с использованием:
localStorage;sessionStorage.В качестве примера, мы подробно рассмотрим схематичный пример по работе с хранилищами данных на стороне клиента, а именно с localStorage. Вариант задания по реализации аналогичного функционала средствами sessionStorage остается на самостоятельное выполнение.
С теорией, касающейся работы с localStorage можно ознакомиться в лекции № 15 настоящего курса.
Выделим задачи, которые необходимо выполнить в рамках задания:
Для начала условимся, что запись блокнота представляет собой пару значений {наименование записи, текст записи}.
Нам понадобится HTML - документ со следующей структурой:
(рис 19.1) Макет внешнего вида HTML - документа
Список записей будет представлять собой нумерованный набор гиперссылок - наименований существующих записей.
Также нам понадобятся два поля для ввода значений Наименования и Текста записи, а также две кнопки - Сохранить и Удалить.
Создадим HTML - разметку для нашей веб - страницы, сразу же укажем атрибуты id и class, для упрощения стилизации ряда элементов, а также наименования JavaScript - функций, там, где это необходимо:
<body onload="listLoad();">
<div id="header">
<h1>Пример работы с localStorage</h1>
</div>
<div id="notes">
<h3> Список записей</h3>
<ol id="notelist"></ol>
</div>
<div id="note">
<form id="formnote">
<fieldset>
<table>
<tr>
<td><label class="notefield">Наименование
</label></td>
<td colspan=2>
<input id="notename" type="text"
class="notefield"></input>
</td>
</tr>
<tr>
<td><label class="notefield">Текст записи
</label></td>
<td colspan=2>
<textarea id="notecontent" rows=10></textarea>
</td>
</tr>
<tr>
<td></td>
<td class="notebtn"><button id="save"
type="submit" onclick="saveNote(); "
>Сохранить</button></td>
<td class="notebtn"><button id="delete"
type="submit" onclick="deleteNote();"
>Удалить</button></td>
</tr>
</table>
</fieldset>
</form>
</div>
<div id="footer">
<p class="footertext">2012 г.</p>
</div>
</body>
В браузере ознакомимся с результатом:
(рис 19.2) Результат выполенния шага 1
Отметим, что нами уже заранее указаны имена функций, а именно:
listLoad() – функция формирующая список записей, при загрузке веб - страницы;saveNote() – функция сохранения записи в localStorage;deleteNote() – функция localStorage.Детально функции будут рассмотрены нами на шаге 3.
Чтобы страница смотрелась, создадим файл стилей и "привяжем" его к HTML - документу.
Для начала зададим
body
{
background-color:#F7F7F7;
}
Определим выравнивание и размещение контейнера, где будет размещаться список записей:
#notes
{
float:left;
width:250px;
}
Выровняем контейнер с элементами управления
#note
{
float:left;
margin-left:20px;
}
Зададим размещение и атрибуты стиля текста для контейнера :
#footer
{
clear:left;
text-align:center;
font-style:italic;
}
Зададим отступ для формы с
#formnote
{
margin-top: 30px;
}
Несколько мелких правок для заголовков, текстовых полей, кнопок и ячеек таблицы:
#formnote
{
margin-top: 30px;
}
#notecontent, #notename
{
width:450px;
}
.notebtn
{
text-align:center;
}
td
{
vertical-align:top;
}
h1, h3
{
font-style:italic;
text-align:center;
Зададим рамку вокруг fieldset'а:
fieldset
{
border:1px dashed #CCC;
padding:10px;
Немного больше внимания, чем остальным элементам, уделим надписям и формам ввода текста:
label
{
width:142px;
height:32px;
background-color:#CCCCCC;
float:left;
display: block;
font-family:Arial, Helvetica, sans-serif;
font-size: 100%;
letter-spacing: -1px;
font-weight: normal;
line-height: 1.1;
color:#666;
}
.notefield
{
margin-top:3px;
margin-right:2px;
padding-top:11px;
padding-left:6px;
height:32px;
}
И наконец, для того, чтобы ссылки списка выделялись при наведении на них курсора, и чтобы текст шрифт отличался от обычного синего с подчеркивание, определим селекторы соответствующих
a:link, a:visited
{
color:#666;
font-style:italic;
font-weight:500;
text-decoration:none;
font-family:Arial, Helvetica, sans-serif;
}
a:hover, li:hover
{
color:#666;
font-style:italic;
font-weight:bolder;
cursor: pointer;
Результатом станет веб - страница следующего вида:
(рис 19.3) Результат выполнения шага 2
Собственно, теперь можно перейти к сути работы с localStorage.
Нами уже были перечислены необходимые функции. Рассмотрим подробнее создание каждой из них.
Сохранение новой записи:
function saveNote()
{
var name = document.getElementById('notename').value;
/* создание переменной, хранящей значение введенное в поле Наименование.*/
var content = document.getElementById('notecontent').value;
/* создание переменной для хранения текста самой записи*/
if(content == '')
{
alert('enter valid note text');
/* выводим предупреждающее сообщение, в случае, если не задан текст записи, см. рис. 4*/
}
else
{
if (name == 0)
{
alert('enter valid note name');
/* выводим предупреждающее сообщение, если не задано наименование записи, см. рис. 5*/
}
else {localStorage[name] = content;}
/* создание записи в localStorage, обратите внимание, что наименование
записи является идентификатором, по которому сможем извлечь текст записи*/
/*Также отметим, что если пользователь выберет уже существующую запись и введет
новый текст, без изменения наименования, то, по сути, произойдет редактирование
записи, поскольку новое значение текста сохранится поверх старого, соответственно,
если будет изменено наименование записи, то, фактически, произойдет создание новой*/
}
(рис 19.4) Сообщение о некорректном значении текста записи
(рис 19.5) Сообщение о некорректном значении наименования записи
Теперь, рассмотрим функцию формирования списка записей:
function listLoad()
{
var list = document.getElementById('notelist');
/* получаем доступ к элементу - списку нашей веб - страницы*/
for(var i in localStorage)
/* цикл для перебора каждого значения, сохраненного в localStorage,
при этом i, принимает значение идентификатора хранимых данных, т.е., в нашем
примере, переменная i содержит наименование записи*/
{
var a = document.createElement('a'); /* создаем новый html - */
a.setAttribute('onclick', "loadNote('"+i+"'); return false;");
/*определяем атрибут onclick, при клике, в нашем случае, вызовется функция
loadNote с параметром Наименования записи*/
a.innerText = i;
/* задаем значение текста ссылки эквивалентным наименованию записи*/
var element = document.createElement('li');
/* создаем новый html - элемент, а именно пункт списка*/
element.appendChild(a);
/* добавляем пункту списка дочерний элемент – ссылку*/
list.appendChild(element);
/* добавляем списку дочерний элемент – пункт списка*/
}
В листинге 19.11 задаются параметры вызова функции загрузки записи по клику на ссылке, рассмотрим эту функцию:
function loadNote(v)
{
document.getElementById('notecontent').value = localStorage[v];
/*выводим в текстовое поле текст записи*/
document.getElementById('notename').value = v;
/* выводим в поле наименование записи*/
}
Осталось только написать функцию для
function deleteNote()
{
var name = document.getElementById('notename').value;
/*получаем значение наименования текущей записи из текстового поля*/
if (name != '')
{
localStorage.removeItem(name);
/*удаление записи, в качестве идентификатора записи используется ее наименование*/
}
else {alert('note not found');}
/* сообщение, выдаваемое при попытке удалить неопределенную запись*/
}
Задание можно считать выполненным.
Результат выполнения заданий представлен на рисунках 19.6 - 19.9 .
(рис 19.6) Создание записи
(рис 19.7) Результат сохранения записи 1
(рис 19.8) Создано несколько записей, в том числе запись 3 для удаления
(рис 19.9) Результат удаления записи 3
С дополнительными материалами по теме можно ознакомиться в списке материалов для самостоятельного изучения лекции №15.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.