开发者问题收集

如何使用 createElement 使我的 div 出现

2018-03-21
42

我试图在 HTML 中现有 div 的正下方创建另一个 div

<html>
    <head>
        <title>    
            Media Player
        </title>
        <script src="script.js"></script>
    </head>
    <script>
            makeOscarPlayer(document.getElementById("my-video"))
    </script>
    <body>
        <div class="my-player">
            Hello! 
        </div>
    </body>
</html>

function makeOscarPlayer(){
   var div = document.createElement("div");
    div.innerHTML = `
    hello
`
}

有人能向我解释一下我做错了什么吗?我是一名自学成才的开发人员,如果我的代码组织得不够完美,我很抱歉,我仍在学习

3个回答

您在创建 makeOscarPlayer() 函数之前调用了它。

您需要将 makeOscarPlayer() 函数声明包装在脚本标记中。

您将 document.getElementById("my-video") 作为参数传递给 makeOscarPlayer() ,但没有 id 为“my-video”的 HTML 元素。您为该函数提供了一个 null 参数,而函数声明没有参数。

您需要告诉脚本将新元素放在何处。为此,您需要抓取一个现有元素并使用 parentNodeinsertBefore

下面是我提供的供您参考的基本版本:

<html>
  <head>
      <title>    
          Media Player
      </title>
  </head>
  <script>
  </script>
  <body>
      <div id="my-player">
          Hello! 
      </div>
  </body>
</html>

<script type="text/javascript">
  function makeOscarPlayer(){
    var div = document.createElement("div");
    div.innerHTML = `hello`;

    // This grabs the element that you want to create a new element by
    var existingDiv = document.getElementById("my-player");

    // This tells the script where to put the new element
    existingDiv.parentNode.insertBefore( div, existingDiv.nextSibling);
  }

  // Must be called in the same script block or after the script holding the function declaration is loaded
  makeOscarPlayer();
</script>

有关 parentNodeinsertBefore 如何工作的更多信息,请参阅 此 Stack Overflow 问题

Brandon Baker
2018-03-21

您需要将新元素附加到特定的父元素,在您的情况下为 my-video

函数 appendChild 将新元素附加到父元素。

function makeOscarPlayer(parent) {
  var div = document.createElement("div");
  div.innerHTML = 'Hello from Ele';

  parent.appendChild(div);
}

makeOscarPlayer(document.getElementById("my-video"))
#my-player {
  border: 1px dashed green;
  padding: 5px;
  margin: 5px;
  width: 300px;
  background-color: #f1f1f1
}

#my-video div {
  border: 1px dashed green;
  padding: 5px;
  margin: 5px;
  width: 200px;
  font-weight: 700;
}
<div id="my-player">
  Hello!
  <div id="my-video">
  </div>
</div>
Ele
2018-03-21

这是一个好的开始,但是你错误地调用了该函数,并且你的函数没有向页面添加任何内容。

我们使用 appendChild 向页面添加一个节点。

在你的函数中,你创建并向一个 div 添加文本,但是你没有返回你创建的节点( 并且你没有用分号结束你的代码行,所以我也添加了它 )但这应该有效:

<html>

<head>
  <title>
    Media Player
  </title>
</head>

<body>

  <div class="my-player">
    Hello!
  </div>

  <script>
    function makeOscarPlayer() {
      var div = document.createElement("div");
      div.innerHTML = `hello`;
      return div;
    }
    document.getElementById("my-video").appendChild(makeOscarPlayer())
  </script>
</body>

</html>
function makeOscarPlayer() {
      var div = document.createElement("div");
      div.innerHTML = `hello`;
      return div;
    }
    document.getElementById("my-video").appendChild(makeOscarPlayer())
<html>

<head>
  <title>
    Media Player
  </title>
</head>

<body>
  <!-- added my-video div -->
  <div id="my-video"></div>

  <div class="my-player">
    Hello!
  </div>

</body>

</html>
zfrisch
2018-03-21