Как добавить в localStorage функцию javascript

209
03 апреля 2018, 01:36

Всем привет, я начинающий разраб в javascript. У меня есть почти готовый код, но я никак не могу добавить в localStorage ещё одну функцию. Задача скрипта: копировать выделенный текст и вставлять его в новый div и вот тут начинается проблема с добавлением и запоминанием в localStorage уникального класса. Я пытаюсь добавить класс div-i, но localStorage его не запоминает. Подскажите в чем проблема.

<!DOCTYPE HTML>
<html lang="ru">
<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="style.css">
  <title>Test</title>
</head>
<body>
  <div>
    <p>Текст предназначенный для выделения</p>
    <p>Текст предназначенный для выделения2</p>
    <p>Текст предназначенный для выделения3</p>
  </div>
  <div id="sel">Здесь будет текст, который будет выделяться</div>
  <button class="save-btn" onclick="saveText();">Сохранить</button>
  <script src="copy2.js" charset="utf-8"></script>
</body>
</html>
"use strict";
function getSelectionText() {
  var text = "";
  var activeEl = document.activeElement;
  var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
  if (
    (activeElTagName == "textarea") || (activeElTagName == "input" &&
      /^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
    (typeof activeEl.selectionStart == "number")
  ) {
    text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
  } else if (window.getSelection) {
    text = window.getSelection().toString();
  }
  return text;
}
function saveText() {
  var text = "<div class=\"copyDiv\">" + "<p>" + getSelectionText() + "</p>" + "<button class=\"close\" onclick=\"deleteText();\">x</button>" + "</div>";
  if (localStorage.getItem("savedText") === null) {
    localStorage["savedText"] = "";
  }
  localStorage["savedText"] += text;
  showText();
  takeClass();
}
function showText() {
  var innerDiv = localStorage["savedText"];
  document.getElementById("sel").innerHTML = innerDiv;
  takeClass();
}
function takeClass() {
  var btn = document.querySelector(".save-btn");
  var sel = document.querySelector("#sel");
  var div = document.querySelector(".copyDiv");
  var children = sel.childNodes;
  var activeBtn = btn.addEventListener('click', function() {
    for (var i = 0; i < 30; ++i) {
      if (children[i]) {
        children[i].classList.add("div-" + i);
      }
    }
  });
  var innerClass = localStorage["savedText"];
  activeBtn = innerClass;
}
function deleteText() {
  document.getElementById("sel").innerHTML = '';
  localStorage.removeItem("savedText");
}
window.onload = function() {
  showText();
  takeClass();
};
Answer 1

Я бы не рекомендовал этот способ, но все же

Для сохранения функции переведите ее в строку:

var yourFunc = function() { ... }
localStorage.setItem('func', yourFunc.toString())

Для того чтобы ее выполнить:

var func = localStorage.getItem('func')
var yourFunc = eval('(' + func + ')')
yourFunc()

UPD: и не стоит использовать localStorage как простой объект. Пользуйтесь функциями setItem, getItem

READ ALSO
Повторная регистрация

Повторная регистрация

К примеру, у меня есть платный доступ к страницеПервый месяц доступ бесплатный

204
Как перезагрузить reCAPTCHA

Как перезагрузить reCAPTCHA

Как можно перезагрузить reCAPTCHA через js?

208
Сумма классов js

Сумма классов js

Нужно получить сумму классов у которых data-option равны

227
Как изменить размер изображения в canvas?

Как изменить размер изображения в canvas?

Есть объект canvasКак изменить его ширину сохраняя пропорции? Затем я его преобразую в готовый код image

228