如何在JavaScript中为动态创建的元素设置属性

如何在JavaScript中为动态创建的元素设置属性,javascript,Javascript,我试图理解用JavaScript动态创建的HTML元素。具体来说,有人可以解释为什么如果我在HTML中创建一个没有值属性的按钮,它将显示为没有文本。然后我可以向它添加一个值,文本将显示在按钮中,我还可以像这样提醒该值: var Button1 = document.getElementById("Button1"); Button1.value = "test"; alert(Button1.value); 但是,如果我动态生成按钮,然后添加值,它不会出现在按钮上,尽管我仍然可以提醒它 var

我试图理解用JavaScript动态创建的HTML元素。具体来说,有人可以解释为什么如果我在HTML中创建一个没有值属性的按钮,它将显示为没有文本。然后我可以向它添加一个值,文本将显示在按钮中,我还可以像这样提醒该值:

var Button1 = document.getElementById("Button1");
Button1.value = "test";
alert(Button1.value);
但是,如果我动态生成按钮,然后添加值,它不会出现在按钮上,尽管我仍然可以提醒它

var Button1 = document.createElement("button");
var Div1 = document.getElementById("Div1");
Button1.value = "test";
Div1.appendChild(Button1);
alert(Button1.value);
在第二个示例中,按钮的文本没有更改,但值仍会发出警报。我知道我可以使用createTextNode并将其附加到按钮,但我试图理解通过JavaScript动态生成的控件与用HTML创建的控件之间的区别


感谢您阅读我的问题。

在第二个代码段中,您的按钮对象不是DOM的一部分,因此浏览器不会显示它

在第二个示例中,您创建了一个新元素并为其赋值,但您没有将其添加到DOM中——它完全存在于JavaScript中,这就是警报工作的原因。要查看页面上的按钮,需要将其附加到文档中,通常使用appendChild()

您说,“但是,如果我动态生成按钮,然后添加值,它不会显示在按钮上,尽管我仍然可以提醒它。”以及“按钮的文本不会更改,但值仍然会提醒”这让我有点困惑,因为似乎页面上已经有一个按钮,您希望第二个示例的代码会更改

第一个示例是一个教科书式的示例,介绍如何获取DOM中已经存在的元素,分配(或更改)其值,然后向其发出警报

var Button1 = document.createElement("button");
var Div1 = document.getElementById("Div1");
Button1.value = "test";
Div1.appendChild(Button1);
alert(Button1.value);
更新:要回答修改后的问题,您的代码正在更改按钮的值,但如果您希望看到页面上按钮的文本发生更改,则需要更改其innerHTML值,如使用
Button1.innerHTML=“test”。按钮元素与输入按钮不同,输入按钮的值显示为按钮的文本。按钮元素的文本来自开始
和结束
标记之间的文本


示例:
test

您的第二个示例实际上并没有将按钮放在HTML页面的任何位置;它只是作为一个变量存在于Javascript中。所以我不确定你在哪里看到按钮的文本没有改变-整个按钮都不可见。您在页面上看到的任何按钮都不是您刚刚用Javascript创建的按钮,除非您将其添加到页面中(通常是通过对页面上已存在的元素调用appendChild())

因为button元素的value属性不会更改按钮的文本,因为您可以将所需的所有内容放入button标记中,像图像等…:

您的第一个代码片段在Chrome中不适用于我。例如,我无法使用value属性更改按钮的文本。


您可以使用myButton.innerHTML设置按钮元素的文本,但不能使用myButton.value。

hmm即使使用appendChild()对我来说,似乎也没有设置文本:是的,谢谢。我需要学会更清楚。在第二个示例中,我修改为代码,将按钮添加到div。因此,在第二个示例中,按钮将显示,但它将不显示文本,即使我已为“value”属性指定了值。我可以使用document对象的createTextNode方法,将文本节点添加到按钮中,这样就可以了。但是我正在试图理解为什么我不能像用HTML创建的按钮那样简单地修改value属性。谢谢。我使用了innerHTML并得到了我想要的结果。不过,如果我更改Button1的值属性,它会更改IE8中的文本,我仍然不理解,但我还是标记了您的答案。也许这是IE8的问题?我相信这只是IE8在(等待它)怪癖模式下运行的众多怪癖之一。在创建按钮元素时,最好创建TextNode,然后追加Child,而不是使用innerHTML。此外,我认为如果没有设置“值”,IE默认按钮标签之间的文本为“值”,因此最好在重要的时候故意设置“值”。是的。我修改了第二个示例,将按钮放在页面上。对不起,是的。我道歉。我编辑了我的问题,所以第二个例子现在将按钮放在页面上。这是有意义的,但在第一个例子中,在IE8中,它改变了页面上按钮的文本。我想知道这是否是IE或IE8特有的东西。