2017-01-25 5 views
0

Wie kann ich eine Reihe von (Kopien von) Objekten aus dem ursprünglichen DOM beibehalten, so behält das Set trotz DOM-Änderungen seine ursprünglichen Werte bei?Javascript: Wie kann ich eine Variable aus DOM-Änderungen beibehalten

Zum Beispiel:

<body class="toc endnotes"> 

Und führt ein Skript mit diesem:

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); 
    // ... 

Mit der Variablen anchors, ich versuche, eine Liste der Anker Objekte zu erhalten, wie es, wenn die Seite war kam vom Server und verwendet das als Eingabe für .

Was addEndNotes() bekommt aber ist eine Liste von Anker-Objekten wie von geändert. addToc() fügt Links auf h2 in einem Inhaltsverzeichnis, sagen 'n' Elemente. Es verwendet keine Variable anchors noch etwas mit dem gleichen Namen.

Noch die zweite Warnung meldet eine Anzahl von Elementen in anchors das ist (Originalnummer + 2n): Diese Liste wird von Änderungen im DOM nach anchors wird deklariert und bevor es erneut verwendet wird.

Ursprünglich war die Initialisierung von anchors im globalen Bereich, aber ich habe von einer Seite über den Variablenbereich gelernt, dass es erst später initialisiert wird, wenn es außerhalb einer Funktion ist. Also habe ich den Anker in diese Funktion gebracht, aber das hat keinen Unterschied im Ergebnis gemacht.

Re eine andere Sprache Ich würde sagen, ich will Kopien anstelle von Referenzen, wie macht man das in JS?

+0

Was ist in 'addToc'? –

+0

Können Sie ein Diagramm bereitstellen? – danny117

Antwort

0

die Antwort von dieser Kette von Links gefunden: 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?

Anscheinend Sie eine "Klon" -Funktion von einer Art, jQuerys oder andere benötigen, um eine Kopie eines Objekts zu erstellen, das nicht von Änderungen am Original betroffen ist (siehe den letzten Link).

Verwandte Themen