如何将 DOM 元素设置为第一个子元素?

发布于 2024-08-16 20:33:51 字数 148 浏览 9 评论 0原文

我有一个元素 E,我正在向其附加一些元素。突然,我发现下一个要追加的元素应该是 E 的第一个子元素。有什么技巧,该怎么做? unshift 方法不起作用,因为 E 是一个对象,而不是数组。

很长的方法是迭代 E 的子级并移动它们 key++,但我确信有一个更好的方法。

I have an element E and I'm appending some elements to it. All of a sudden, I find out that the next element to append should be the first child of E. What's the trick, how to do it? Method unshift doesn't work because E is an object, not array.

Long way would be to iterate through E's children and to move'em key++, but I'm sure that there is a prettier way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

◇流星雨 2024-08-23 20:33:51
var eElement; // some E DOM instance
var newFirstElement; //element which should be first in E

eElement.insertBefore(newFirstElement, eElement.firstChild);
var eElement; // some E DOM instance
var newFirstElement; //element which should be first in E

eElement.insertBefore(newFirstElement, eElement.firstChild);
怪我太投入 2024-08-23 20:33:51

2018 版本 - prepend

parent.prepend(newChild)  // [newChild, child1, child2]

这是现代 JS!它比以前的选项更具可读性。目前可在 Chrome、FF 和 Opera 中使用。

添加到末尾的等效项是 append,替换旧的 appendChild

parent.append(newChild)  // [child1, child2, newChild]

高级用法

  1. 您可以传递多个值(或使用扩展运算符 ... )。
  2. 任何字符串值都将作为文本元素添加。

示例:

parent.prepend(newChild, "foo")   // [newChild, "foo", child1, child2]

const list = ["bar", newChild]
parent.append(...list, "fizz")    // [child1, child2, "bar", newChild, "fizz"]

相关 DOM 方法

  1. 了解更多 - child.beforechild.after
  2. 了解更多 - child.replaceWith

Mozilla 文档

我可以使用

2018 version - prepend

parent.prepend(newChild)  // [newChild, child1, child2]

This is modern JS! It is more readable than previous options. It is currently available in Chrome, FF, and Opera.

The equivalent for adding to the end is append, replacing the old appendChild

parent.append(newChild)  // [child1, child2, newChild]

Advanced usage

  1. You can pass multiple values (or use spread operator ...).
  2. Any string value will be added as a text element.

Examples:

parent.prepend(newChild, "foo")   // [newChild, "foo", child1, child2]

const list = ["bar", newChild]
parent.append(...list, "fizz")    // [child1, child2, "bar", newChild, "fizz"]

Related DOM methods

  1. Read More - child.before and child.after
  2. Read More - child.replaceWith

Mozilla Documentation

Can I Use

人│生佛魔见 2024-08-23 20:33:51

2017 版本

您可以使用

targetElement.insertAdjacentElement('afterbegin', newFirstElement)

来自 MDN

insertAdjacentElement() 方法在相对于调用它的元素的给定位置插入给定元素节点。

位置
表示相对于元素的位置的 DOMString;必须是以下字符串之一:
beforebegin:在元素本身之前。
afterbegin:就在元素内部,在其第一个子元素之前。
beforeend:就在元素内部,在其最后一个子元素之后。
afterend:在元素本身之后。

元素
要插入到树中的元素。

insertAdjacent 系列中,有兄弟方法:

element.insertAdjacentHTML('afterbegin','htmlText')`

可以直接注入 html 字符串,如 innerHTML 但不覆盖所有内容,因此您可以将其用作迷你模板 Engin并跳过 document.createElement 的压抑过程,甚至使用字符串操作过程

element.insertAdjacentText 构建一个完整的组件,以将清理字符串注入到 element 中。不再需要编码/解码

2017 version

You can use

targetElement.insertAdjacentElement('afterbegin', newFirstElement)

From MDN :

The insertAdjacentElement() method inserts a given element node at a given position relative to the element it is invoked upon.

position
A DOMString representing the position relative to the element; must be one of the following strings:
beforebegin: Before the element itself.
afterbegin: Just inside the element, before its first child.
beforeend: Just inside the element, after its last child.
afterend: After the element itself.

element
The element to be inserted into the tree.

In the family of insertAdjacent there is the sibling methods:

element.insertAdjacentHTML('afterbegin','htmlText')`

That can inject html string directly, like innerHTML but without override everything, so you can use it as a mini-template Engin and jump the oppressive process of document.createElement and even build a whole component with string manipulation process

element.insertAdjacentText for inject sanitize string into element . no more encode/decode

知你几分 2024-08-23 20:33:51

您可以直接在所有窗口 html 元素中实现它。
像这样 :

HTMLElement.prototype.appendFirst = function(childNode) {
    if (this.firstChild) {
        this.insertBefore(childNode, this.firstChild);
    }
    else {
        this.appendChild(childNode);
    }
};

You can implement it directly i all your window html elements.
Like this :

HTMLElement.prototype.appendFirst = function(childNode) {
    if (this.firstChild) {
        this.insertBefore(childNode, this.firstChild);
    }
    else {
        this.appendChild(childNode);
    }
};
影子是时光的心 2024-08-23 20:33:51

接受的答案重构为函数:

function prependChild(parentEle, newFirstChildEle) {
    parentEle.insertBefore(newFirstChildEle, parentEle.firstChild)
}

Accepted answer refactored into a function:

function prependChild(parentEle, newFirstChildEle) {
    parentEle.insertBefore(newFirstChildEle, parentEle.firstChild)
}
诠释孤独 2024-08-23 20:33:51

除非我误解了:

$("e").prepend("<yourelem>Text</yourelem>");

或者

$("<yourelem>Text</yourelem>").prependTo("e");

虽然从你的描述来看好像有附加条件,所以

if (SomeCondition){
    $("e").prepend("<yourelem>Text</yourelem>");
}
else{
    $("e").append("<yourelem>Text</yourelem>");
}

Unless I have misunderstood:

$("e").prepend("<yourelem>Text</yourelem>");

Or

$("<yourelem>Text</yourelem>").prependTo("e");

Although it sounds like from your description that there is some condition attached, so

if (SomeCondition){
    $("e").prepend("<yourelem>Text</yourelem>");
}
else{
    $("e").append("<yourelem>Text</yourelem>");
}
哎呦我呸! 2024-08-23 20:33:51

我认为您正在寻找 jQuery 中的 .prepend 函数。示例代码:

$("#E").prepend("<p>Code goes here, yo!</p>");

I think you're looking for the .prepend function in jQuery. Example code:

$("#E").prepend("<p>Code goes here, yo!</p>");
心欲静而疯不止 2024-08-23 20:33:51

我创建这个原型是为了将元素添加到父元素之前。

Node.prototype.prependChild = function (child: Node) {
    this.insertBefore(child, this.firstChild);
    return this;
};

I created this prototype to prepend elements to parent element.

Node.prototype.prependChild = function (child: Node) {
    this.insertBefore(child, this.firstChild);
    return this;
};
‖放下 2024-08-23 20:33:51
var newItem = document.createElement("LI");       // Create a <li> node
var textnode = document.createTextNode("Water");  // Create a text node
newItem.appendChild(textnode);                    // Append the text to <li>

var list = document.getElementById("myList");    // Get the <ul> element to insert a new node
list.insertBefore(newItem, list.childNodes[0]);  // Insert <li> before the first child of <ul>

https://www.w3schools.com/jsref/met_node_insertbefore.asp

var newItem = document.createElement("LI");       // Create a <li> node
var textnode = document.createTextNode("Water");  // Create a text node
newItem.appendChild(textnode);                    // Append the text to <li>

var list = document.getElementById("myList");    // Get the <ul> element to insert a new node
list.insertBefore(newItem, list.childNodes[0]);  // Insert <li> before the first child of <ul>

https://www.w3schools.com/jsref/met_node_insertbefore.asp

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文