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