Как установить элемент DOM в качестве первого дочернего элемента? - PullRequest
178 голосов
/ 05 января 2010

У меня есть элемент E, и я добавляю некоторые элементы к нему. Внезапно я обнаружил, что следующий элемент должен быть первым потомком Е. Что за хитрость, как это сделать? Метод unshift не работает, потому что E это объект, а не массив.

Долгий путь состоит в том, чтобы перебрать детей E и переместить их ключ ++, но я уверен, что есть более красивый способ.

Ответы [ 9 ]

392 голосов
/ 05 января 2010
var eElement; // some E DOM instance
var newFirstElement; //element which should be first in E

eElement.insertBefore(newFirstElement, eElement.firstChild);
72 голосов
/ 12 апреля 2017

2017 версия

Вы можете использовать

targetElement.insertAdjacentElement('afterbegin', newFirstElement)

От MDN :

Метод insertAdjacentElement () вставляет данный узел элемента в заданную позицию относительно элемента, к которому он вызывается.

положение
DOMString, представляющая позицию относительно элемента; должна быть одной из следующих строк:
beforebegin: перед самим элементом.
afterbegin: Прямо внутри элемента, перед его первым потомком.
beforeend: только внутри элемента, после его последнего потомка.
afterend: после самого элемента.

элемент
Элемент, который нужно вставить в дерево.

Также в семействе insertAdjacent есть родственные методы:

element.insertAdjacentHTML('afterbegin','htmlText') для непосредственного ввода html-строки, например innerHTML, но без переопределения всего, так что вы можете прыгнуть на репрессивный процесс document.createElement и даже построить целый компонент с процессом манипуляции со строкой

element.insertAdjacentText для вставки дезинфицирующей строки в элемент. не более encode/decode

41 голосов
/ 08 мая 2017

2018 версия

parentElement.prepend(newFirstChild);

Это современный JS! Это более читабельно, чем предыдущие варианты. В настоящее время он доступен в Chrome, FF и Opera.

P.S. Вы можете непосредственно предварять строки

parentElement.prepend('This text!');

developer.mozilla.org

Могу ли я использовать - 90% май 2019

Polyfill

9 голосов
/ 03 января 2015

Вы можете реализовать это непосредственно во всех ваших html-элементах окна.
Как это:

HTMLElement.prototype.appendFirst=function(childNode){
    if(this.firstChild)this.insertBefore(childNode,this.firstChild);
    else this.appendChild(childNode);
};
5 голосов
/ 16 июля 2015

Принятый ответ, преобразованный в функцию:

function prependChild(parentEle, newFirstChildEle) {
    parentEle.insertBefore(newFirstChildEle, parentEle.firstChild)
}
3 голосов
/ 05 января 2010

Если я не понял:

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

Или

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

Хотя из вашего описания звучит так, что есть какое-то условие, поэтому

if (SomeCondition){
    $("e").prepend("<yourelem>Text</yourelem>");
}
else{
    $("e").append("<yourelem>Text</yourelem>");
}
2 голосов
/ 05 января 2010

Я думаю, вы ищете функцию .prepend в jQuery. Пример кода:

$("#E").prepend("<p>Code goes here, yo!</p>");
0 голосов
/ 13 декабря 2017
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

0 голосов
/ 20 августа 2017

Я создал этот прототип для добавления элементов к родительскому элементу.

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