如何保留原始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中如何做到这一点?
答案 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或其他函数,以确保复制一个不受原始更改影响的对象的副本(参见最后一个链接)。