Javascript 带隐藏元素的insertHTML

Javascript 带隐藏元素的insertHTML,javascript,html,innerhtml,ecmascript-5,Javascript,Html,Innerhtml,Ecmascript 5,我需要确认一下 我试图将内容从一个元素交换到另一个包含HTML标记的元素。我非常确信,当我声明下面的代码应该工作时,我是正确的。我需要知道我是否正确,因为如果我认为这不起作用的原因是,我需要创建一些额外的函数 请确认这是正确的还是错误的: function subNavContent ( ) { var navContent = document.getElementsByClassName( 'pageNav' ).innerHTML; document.getElem

我需要确认一下

我试图将内容从一个元素交换到另一个包含HTML标记的元素。我非常确信,当我声明下面的代码应该工作时,我是正确的。我需要知道我是否正确,因为如果我认为这不起作用的原因是,我需要创建一些额外的函数

请确认这是正确的还是错误的:

function subNavContent ( ) {  

    var navContent = document.getElementsByClassName( 'pageNav' ).innerHTML;

    document.getElementById( 'subNav' ).innerHTML = navContent;}
致电:

<div class="pageNav">
    <h1 data-title="Welcome to The Mind Company"><a>Welcome</a></h1>
</div>

欢迎
发送至:

    <nav id="subNav" class="aniSubNavOpen drop-shadow lifted">
    </nav>

这是错误的

看起来
.innerHTML
在内部是某种
设置程序
,这意味着复制引用时失去了上下文(至少在FF12中是这样)

这将有助于:

document.getElementById( 'subNav' ).innerHTML = navContent;
这是错误的

看起来
.innerHTML
在内部是某种
设置程序
,这意味着复制引用时失去了上下文(至少在FF12中是这样)

这将有助于:

document.getElementById( 'subNav' ).innerHTML = navContent;

NavSub是innerHTML的文本。使navSub成为对象,然后navSub.innerhtml=。。。(对不起,帽子用得不好,我在打电话。)。如果您不明白我的意思,请发表评论。

NavSub是innerHTML的文本。使navSub成为对象,然后navSub.innerhtml=。。。(对不起,帽子用得不好,我在打电话。)。如果您不明白我的意思,请发表评论。

当您执行这两行时:

var navSub = document.getElementById( 'subNav' ).innerHTML;
var navContent = document.getElementsByClassName( 'pageNav' )[0].innerHTML;
您将从这两个对象获取HTML文本,并将其存储在两个变量中。现在有两个常规javascript变量,每个变量中都有一个字符串

当你这样做时:

navSub = navContent;
您只是将navContent字符串分配给navSub javascript变量。它不会以任何方式影响DOM。这只是两个字符串变量

如果要更改DOM中navSub对象的内容,可以执行以下操作:

var navSubObj = document.getElementById( 'subNav' );
var navContent = document.getElementsByClassName( 'pageNav' )[0].innerHTML;
navSubObj.innerHTML = navContent;
另外,请注意,我必须改变这一点:

var navContent = document.getElementsByClassName( 'pageNav' ).innerHTML;
为此:

var navContent = document.getElementsByClassName( 'pageNav' )[0].innerHTML;

因为
getElementsByClassName()
返回一个数组,而不是一个对象(因为它可以返回多个项)。在这方面它与
getElementById()
不同,因为
getElementById()
只返回一个对象。

执行这两行时:

var navSub = document.getElementById( 'subNav' ).innerHTML;
var navContent = document.getElementsByClassName( 'pageNav' )[0].innerHTML;
您将从这两个对象获取HTML文本,并将其存储在两个变量中。现在有两个常规javascript变量,每个变量中都有一个字符串

当你这样做时:

navSub = navContent;
您只是将navContent字符串分配给navSub javascript变量。它不会以任何方式影响DOM。这只是两个字符串变量

如果要更改DOM中navSub对象的内容,可以执行以下操作:

var navSubObj = document.getElementById( 'subNav' );
var navContent = document.getElementsByClassName( 'pageNav' )[0].innerHTML;
navSubObj.innerHTML = navContent;
另外,请注意,我必须改变这一点:

var navContent = document.getElementsByClassName( 'pageNav' ).innerHTML;
为此:

var navContent = document.getElementsByClassName( 'pageNav' )[0].innerHTML;


因为
getElementsByClassName()
返回一个数组,而不是一个对象(因为它可以返回多个项)。在这方面它与
getElementById()
不同,因为
getElementById()
只返回一个对象。

hmm,听起来很合理。但是
.innerHTML
下面是一个getter方法吗?我是说,这是什么。它的行为很奇怪,无法将对属性的引用复制到快捷方式?在javascript中,
。innerHTML
的行为类似于对象的属性。您可以设置它,也可以获取它,当您获取或设置该属性时,内部实现将执行正确的操作。无法获取对
.innerHTML
属性本身的引用。它获取属性的当前值,而不是对它的引用。这是不正确的。它取决于属性中的类型。如果属性后面有
对象
,您当然会得到一个引用。但你对原始值的看法是对的,但在这种情况下,你还是觉得不对。因为这个属性不仅是一个简单的文本引用,它的变化直接反映在一个活动的DOM节点上。这就是为什么我认为这在内部是一个setter方法。@BrandonClark-
document.getElementsByClassName('pageNav')
返回一个数组,而不是一个对象,因此您的代码应该是
document.getElementsByClassName('pageNav')[0]。innerHTML
。嗯,听起来很合理。但是
.innerHTML
下面是一个getter方法吗?我是说,这是什么。它的行为很奇怪,无法将对属性的引用复制到快捷方式?在javascript中,
。innerHTML
的行为类似于对象的属性。您可以设置它,也可以获取它,当您获取或设置该属性时,内部实现将执行正确的操作。无法获取对
.innerHTML
属性本身的引用。它获取属性的当前值,而不是对它的引用。这是不正确的。它取决于属性中的类型。如果属性后面有
对象
,您当然会得到一个引用。但你对原始值的看法是对的,但在这种情况下,你还是觉得不对。因为这个属性不仅是一个简单的文本引用,它的变化直接反映在一个活动的DOM节点上。这就是为什么我认为这在内部是一个setter方法。@BrandonClark-
document.getElementsByClassName('pageNav')
返回一个数组,而不是一个对象,因此您的代码需要是
document.getElementsByClassName('pageNav')[0]。innerHTML
。仍然存在问题。按照建议做了更正(我相信我理解你的意思)。这是我的控制台错误:Uncaught TypeError:无法将“innerHTML”的属性设置为NULL。出于未知原因(请稍后解决)。正如“英语vs数学”一样,javascript与某些人的想法不兼容。我就是那种人。当jQuery出现时,它就像一个灯泡熄灭了。我认为使用jQuery和Fixbug是必须的。类vs id问题是歧义或不正确的DOM导航问题。在这里,我也总是使用id和不信任类。不确定你在那里暗示了我什么,但我在两周内没有JavaScript背景,做了一些非常好的事情。还有一对吗