【问题标题】:Create element and append a second element to it before appending to document创建元素并在附加到文档之前附加第二个元素
【发布时间】:2017-12-11 00:36:57
【问题描述】:

我正在尝试创建一个元素,然后将另一个元素附加到该元素,然后再将其传递给文档。我不确定为什么我的代码不起作用,正在测试不同的方法。

var count = 0;
	function addElement() {

		count++;

		// Create plan element
		var newElement = document.createElement("li");
		newElement.classList.add("collection-item");

		var main = document.createElement("div");
		var side = document.createElement("a");
		side.classList.add("secondary-content");
		main.appendChild(side);
		newElement.appendChild(main);

		// append element to plan layout
		planDesign.appendChild(newElement);

		// get values
		var exercise = newExcersise.value;
		var set = newSet.value;
		var rep = newRep.value;
		main.innerHTML = "<span>" + count + ".</span>" + exercise;
		side.innerHTML = "<span>Sets: </span>" + set + " <span>Reps: </span>" + rep;
	}

我需要将创建的“a”元素插入到“div”中。

【问题讨论】:

  • main.innerHTML = 这替换了main 的innerHTML ...包括side 元素

标签: javascript appendchild


【解决方案1】:

您正在使用两种不同的技术来完成同一件事,当您说:

main.innerHTML = "<span>" + count + ".</span>" + exercise;

在成功将side 元素附加到main 之后。

尽可能保持一致。您正在使用 document.createElement()element.innerHTMLelement.appendChild() - 做同一件事的不同方式。

如果您更改代码以便使用 DOM API 创建新节点(而不是使用串联字符串创建 HTML),您将能够更好地控制元素的配置以及它们的去向。

var spn = document.createElement("span");
spn.textContent = count + ".";
main.appendChild(spn);

var text = document.createTextNode(exercise);
main.appendChild(text);

【讨论】:

  • createElementappendChild 是完全不同的东西。
  • @RobG createElement() 允许 appendChild(),因此它是注入新节点的过程的一部分,.innerHTML 也是如此。
  • 抱歉,我在评论“您正在使用 document.createElement()、element.innerHTML 和 element.appendChild() - 三种不同的方式来做同样的事情” ,但实际上是 2(如您之前所说)。
猜你喜欢
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 2016-10-05
  • 1970-01-01
  • 2011-09-14
  • 2019-11-17
相关资源
最近更新 更多