【问题标题】:How to insertBefore() element in body tag?如何在正文标签中插入之前()元素?
【发布时间】:2011-08-26 05:04:59
【问题描述】:

我正在尝试像这样在 js 中使用 insertBefore:

var p = document.createElement("p");
p.innerHTML = "test1";
document.body.insertBefore(p, null);

var p = document.createElement("p");
p.innerHTML = "test2";
document.body.insertBefore(p, null);

但这会在body标签关闭之前添加最后一个p元素,我如何使用它以便在它打开时将其添加到顶部?所以最后添加的元素将是body标签内的第一个元素。

我试过了:

document.body.insertBefore(p, document.getElementsByTagName('body')[0]);

但萤火虫显示:

找不到节点”代码:“8

【问题讨论】:

  • 试用 document.body.prepend。此外,通常最好不要设置 innerHTML。使用oldNode.replaceWith(newNode) 或设置oldNode.innerText
  • @Gibolt textContent 应该是设置文本的首选。

标签: javascript dom insert getelementsbytagname


【解决方案1】:

您可以使用firstChild 属性获取body 元素的第一个子元素。然后作为参考。

const p = document.createElement("p");
p.textContent = "test1";
document.body.insertBefore(p, document.body.firstChild);

出于某种原因,我对您的代码进行了现代化改造:)

【讨论】:

  • 您不应该将文本推送到带有innerHTML 的元素。请改用textContet
  • @Persijn 这只是一个例子,早在 2011 年你必须在 IE 中使用 textContentinnerText,所以这样更方便。
  • 同意,但我评论了它,因为我们不再这样做了。你能改变/编辑它吗?
  • @Persijn 这实际上是 OP 问题中的代码,但是是的,我可以更改它
  • 我们不是为社区回答问题吗?而不是单个用户?我们不是提供帮助的服务。
【解决方案2】:

你必须在某些东西之前插入。 document.getElementsByTagName('body')[0] body 元素(在所有浏览器中获取body元素的语法有点小技巧)1 。如果要插入正文,则要在正文的第一个元素之前插入。可能是这样的:

var body   = document.body || document.getElementsByTagName('body')[0],
    newpar = document.createElement('p');
newpar.innerHTML = 'Man, someone just created me!';
body.insertBefore(newpar,body.childNodes[0]);

1在某些浏览器中为document.body,其他为document.documentElement 等,但在所有浏览器中标记名称为body

【讨论】:

  • 哪些浏览器不支持document.body
  • @alex 你是对的,每个浏览器似乎都支持它。我想这是我记忆中很久以前的痕迹。
  • @Kooilnc 感谢您回复我,我有很多 document.body 在野外,有点担心:P
【解决方案3】:

现代解决方案 - prepend

document.body.prepend(p)

这是 vanilla JS,比以前的选项更具可读性。它目前在all modern browsers 可用。

您可以直接添加字符串,尽管它们不会是“p”标签

parent.prepend("This text!")

相关的 DOM 方法

  1. Read More - parent.append
  2. Read More - child.beforechild.after
  3. Read More - child.replaceWith

Mozilla Documentation

【讨论】:

    【解决方案4】:

    let li = document.querySelectorAll("li");
    let newli = document.createElement("li");
    newli.innerText = "7";
    li[6].before(newli); //this work as insertBefore()this line add 7 before 8
    //li[5].after(newli);
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
      <li>6</li>
      <li>8</li>
      <li>9</li>
      <li>10</li>
    </ul>

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。正确的explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit你的答案添加一些解释,包括你所做的假设
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多