2017-01-25 5 views
0

Как сохранить набор (копий) объектов из исходной DOM, поэтому набор сохраняет свои исходные значения, несмотря на изменения DOM?Javascript: как сохранить переменную из изменений DOM?

Например:

<body class="toc endnotes"> 

и запускает скрипт в том числе это:

function runFunxForBodyClasses() 
{ 
    var bodyClass = document.getElementsByTagName("body")[0].className.trim(); 
    if(bodyClass){ 
     // multiple body classes are space-delimited per html/css 
     var bodyClasses = bodyClass.split(" "); 
     if(bodyClasses.length > 0){ 

      var h2s = document.getElementsByTagName("h2"); 
      var anchors = getAnchors(); 
      // debugging 
      alert(anchors.length); 

      // functions called below, affect the DOM and return void 

      if(bodyClasses.indexOf('toc') > -1){ 
       addToc(h2s); 
      } 

      if(bodyClasses.indexOf('endnotes') > -1){ 
       addEndNotes(anchors); 
      } 

      // ... other irrelevant ones here 
     } 
    } 
} 

function getAnchors() 
{ 
    return document.getElementById("main").getElementsByTagName("a"); 
} 

function addEndNotes(anchors) 
{ 
    if(anchors.length < 1){ 
     return; 
    } 
    // debugging 
    alert(anchors.length); 
    // ... 

С переменной anchors, я пытаюсь сохранить список якорных объектов, как это было, когда страница пришел с сервера и использовал его как вход для addEndNotes().

Что такое addEndNotes(), однако, есть список объектов-якорей, измененных addToc(). addToc() добавляет ссылки на h2 в оглавлении, например «n». Он не использует переменную anchors ни одно и то же имя.

Однако второе предупреждение сообщает о количестве элементов в anchors, который является (исходным номером + 2n): на этот список влияют изменения в DOM после объявления anchors и перед его повторным использованием.

Первоначальная инициализация anchors была в глобальном масштабе, но я узнал из страницы о переменной scope, что она не инициализирована до тех пор, пока она не находится вне функции. Поэтому я поставил привязку в эту функцию, но это не повлияло на результат.

На другом языке, я бы сказал, что мне нужны копии вместо ссылок, как это делается в JS?

+0

Что находится в 'addToc' –

+0

Можете ли вы представить схему? – danny117

ответ

0

Найдено ответ на эту цепочку ссылок: Javascript by reference vs. by value

Is JavaScript a pass-by-reference or pass-by-value language?

How to copy JavaScript object to new variable NOT by reference?

What is the most efficient way to deep clone an object in JavaScript?

Видимо вам нужна функция "клон" какой-то, Jquery или других, чтобы сделать копию объекта, на который не повлияет изменение оригинала (см. последнюю ссылку).

Смежные вопросы