2013-03-22 85 views
0

有谁知道我是否可以在任何HTML元素上调用appendChild?我可以在任何HTML元素上调用appendChild吗?

具体而言,我需要在input type ='text'上做它,它似乎工作?但这是正确的吗?

下面我的代码片段:

var txt = document.createElement('input'); 
txt.type = 'text'; 
... 
var div = document.createElement('div'); 
... 
txt.appendChild(div); 
+4

***为什么***你需要为''元素做? – VisioN 2013-03-22 16:17:20

+0

您只能将元素附加到可以保存元素的元素,因此输入字段不能用作父项 – GottZ 2013-03-22 16:18:06

+0

我需要将它添加到输入中,因为它作为函数中的输入传递给我。我不能称为家长,因为它可能没有。 – Zo72 2013-03-22 16:18:45

回答

1

the w3.org on input element

内容模型:空。

将元素放在input中是无效的。

如果你想设置的输入值,使用value属性:

input.value = 'someText'; 

如果你想要的是你输入之前加一个元素,用insertBefore

input.parentNode.insertBefore(div, input); 

要在输入后插入div,你应该做

input.parentNode.insertBefore(div, input.nextSibling); 
+0

谢谢你。你可能是对的,我会把这个标记为正确答案。对于记录input.parentNode假定输入文本有一个父母,这可能不会在我想要在我的示例中添加div的时候......这正是我问这个问题的原因: – Zo72 2013-03-22 16:25:26

+0

如果您的输入元素附加到dom,它有一个父母。如果你想添加一个后继者,无论如何你需要父母。 – 2013-03-22 16:27:24

+0

我的输入元素可能不会被添加到dom中 – Zo72 2013-03-22 16:30:19

2

有谁知道我是否可以在任何HTML元素上调用appendChild?

你可以。它是元素节点的标准功能。它可能并不总是有道理的。

具体而言,我需要对输入类型='文本',它似乎工作?但这是正确的吗?

<input>元素被定义为空。他们仍然有标准的DOM方法,但不允许有子节点。你试图把DOM置于无效状态,并且(据我所知),当你做的事情未定义时,会发生什么。你不应该这样做。

0

不,你不能将一个孩子追加到输入元素。它是一个独立的元素。但是,您可以将一个输入元素附加到div元素。

0

不,你不能将一个孩子追加到输入,这是因为标准规定这个元素的内容模型为Empty。

它只具有可以通过“。”访问的属性。语法如

input.propertie 
相关问题