Javascript:如何从DOM更改中保留变量

时间:2017-01-25 03:00:11

标签: javascript variables dom

如何保留原始DOM中的一组(副本)对象,因此尽管更改了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的链接,例如&#39; n&#39;项目。它不使用变量anchors也不使用任何相同名称。

然而第二个警报报告了anchors中的一些项目(原始数字+ 2n):在声明anchors之后和使用之前,此列表受到DOM更改的影响试。

最初anchors的初始化在全球范围内,但我从一个关于变量范围的页面中了解到,如果它在函数之外,它直到稍后才真正初始化。所以我把锚点放在那个函数中,但结果没有区别。

另一种语言我会说我想要副本而不是引用,在JS中如何做到这一点?

1 个答案:

答案 0 :(得分: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?

显然你需要一个&#34;克隆&#34;某种类型的函数,Jquery或其他函数,以确保复制一个不受原始更改影响的对象的副本(参见最后一个链接)。