Используйте innerHTML
вместо textContent
:
var my_element = document.getElementById("icon-div");
// create a i tag
var i = document.createElement("i");
i.className = "material-icons";
i.innerHTML = "";
// append the tag to my_element
my_element.appendChild(i);
<html>
<head>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<!--it should be-->
<i class="material-icons"></i>
<!--add it by using appendChild method-->
<div id="icon-div">
</div>
</body>
</html>
textContent
предполагает, что вы вставляете, ну, текст;таким образом, он избегает ввода, так что он не будет отображаться как HTML.Вы хотите, чтобы он отображался как HTML.
Относительно производительности: textContent
на значительно быстрее , чем innerHTML
, потому что браузер не должен анализировать ввод, поэтому он неплохая идея предпочесть textContent
, когда это возможно - но в этом случае вам действительно нужно, чтобы этот разбор выполнялся, поэтому необходимо принять этот небольшой удар по производительности.В большинстве реальных ситуаций разница незначительна, вам придется выполнить десятки тысяч вставок DOM, прежде чем разница станет заметной.