Как вставить элемент HTML перед другими? [Дубликат]

План панда-бара является категорическим сюжетом. Он показывает одну полосу для каждого индекса в целых позициях на шкале. Следовательно, первый барабан находится в позиции 0, следующий на 1 и т. Д. Этикетки соответствуют индексу данных. Если у вас 100 баров, вы получите 100 ярлыков. Это имеет смысл, потому что панды не могут знать, следует ли рассматривать их как категории или порядковые / числовые данные.

Если вместо этого вы используете обычный график штрих-кода matplotlib, он будет обрабатывать индекс данных. Это означает, что бары имеют свое положение в соответствии с фактическими датами, а метки помещаются в соответствии с автоматическим тикером.

import pandas as pd
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=42).tolist()
df = pd.DataFrame(np.cumsum(np.random.randn(42)), 
                  columns=['error'], index=pd.to_datetime(datelist))

plt.bar(df.index, df["error"].values)
plt.gcf().autofmt_xdate()
plt.show()

Преимущество тогда кроме того, могут использоваться matplotlib.dates локаторы и форматирующие элементы. Например. для маркировки каждого первого и пятнадцатого месяца в специальном формате

import pandas as pd
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=93).tolist()
df = pd.DataFrame(np.cumsum(np.random.randn(93)), 
                  columns=['error'], index=pd.to_datetime(datelist))

plt.bar(df.index, df["error"].values)
plt.gca().xaxis.set_major_locator(mdates.DayLocator((1,15)))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%d %b %Y"))
plt.gcf().autofmt_xdate()
plt.show()

114
задан AstroCB 21 August 2014 в 05:33
поделиться

10 ответов

Возможно, вы спрашиваете о методах DOM appendChild и insertBefore.

parentNode.insertBefore(newChild, refChild)

Вставляет узел newChild в качестве дочернего parentNode перед существующим дочерним узлом refChild. (Возвращает newChild.)

Если refChild имеет значение null, в конце списка детей добавляется newChild. Эквивалентно и с большей готовностью используйте parentNode.appendChild(newChild).

114
ответ дан Gajus 25 August 2018 в 09:54
поделиться

В 2017 году, я знаю, для Edge 15 и IE 12, метод prepend не включен как свойство для элементов Div, но если кому-то нужна быстрая ссылка на polyfill, я сделал это:

 HTMLDivElement.prototype.prepend = (node, ele)=>{ 
               try { node.insertBefore(ele ,node.children[0]);} 
                     catch (e){ throw new Error(e.toString()) } }

Простая функция стрелки, совместимая с большинством современных браузеров.

1
ответ дан akiespenc 25 August 2018 в 09:54
поделиться

Если вы хотите вставить необработанную строку HTML независимо от ее сложности, вы можете использовать: insertAdjacentHTML с соответствующим первым аргументом:

'beforebegin' Перед самим элементом. «afterbegin» Только внутри элемента, перед его первым ребенком. 'preend' Просто внутри элемента, после его последнего ребенка. 'afterend' После самого элемента.

Подсказка: вы всегда можете вызвать Element.outerHTML, чтобы получить строку HTML, представляющую вставленный элемент.

Пример использование:

document.getElementById("foo").insertAdjacentHTML("beforeBegin",
          "<div><h1>I</h1><h2>was</h2><h3>inserted</h3></div>");

DEMO

Внимание: insertAdjacentHTML не сохраняет прослушиватели, если они прикреплены с помощью .addEventLisntener.

6
ответ дан artur grzesiak 25 August 2018 в 09:54
поделиться
var insertedElement = parentElement.insertBefore(newElement, referenceElement);

Если referenceElement является null или undefined, новый элемент добавляется в конец списка дочерних узлов.

insertedElement The node being inserted, that is newElement
parentElement The parent of the newly inserted node.
newElement The node to insert.
referenceElement The node before which newElement is inserted.

Примеры можно найти здесь: Node.insertBefore

0
ответ дан b3wii 25 August 2018 в 09:54
поделиться

Это не лучший способ сделать это, но если кто-то хочет вставить элемент перед всем, вот путь.

var newElement = document.createElement("div");
var element = document.getElementById("targetelement");
element.innerHTML = '<div style="display:none !important;"></div>' + element.innerHTML;
var referanceElement = element.children[0];
element.insertBefore(newElement,referanceElement);
element.removeChild(referanceElement);
-1
ответ дан Güven Altuntaş 25 August 2018 в 09:54
поделиться

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

var element = document.createElement("p");
var text = document.createTextNode("Example text");
element.appendChild(text);
document.body.prepend(element);

результат:

<p>Example text</p>
2
ответ дан JamesH 25 August 2018 в 09:54
поделиться

Чтобы упростить вашу жизнь, вы можете расширить HTMLElement. Это может не работать для старых браузеров, но определенно облегчает вашу жизнь:

HTMLElement = typeof(HTMLElement) != 'undefiend' ? HTMLElement : Element;

HTMLElement.prototype.prepend = function(element) {
    if (this.firstChild) {
        return this.insertBefore(element, this.firstChild);
    } else {
        return this.appendChild(element);
    }
};

Итак, в следующий раз вы можете это сделать:

document.getElementById('container').prepend(document.getElementById('block'));
// or
var element = document.getElementById('anotherElement');
document.body.prepend(div);
2
ответ дан moka 25 August 2018 в 09:54
поделиться

Вы не дали нам многого, чтобы продолжить здесь, но я думаю, вы просто спрашиваете, как добавить контент в начало или конец элемента? Если да, вот как вы можете сделать это довольно легко:

//get the target div you want to append/prepend to
var someDiv = document.getElementById("targetDiv");

//append text
someDiv.innerHTML += "Add this text to the end";

//prepend text
someDiv.innerHTML = "Add this text to the beginning" + someDiv.innerHTML;

Довольно легко.

23
ответ дан Munzilla 25 August 2018 в 09:54
поделиться

Вот фрагмент, который поможет вам:

theParent = document.getElementById("theParent");
theKid = document.createElement("div");
theKid.innerHTML = 'Are we there yet?';

// append theKid to the end of theParent
theParent.appendChild(theKid);

// prepend theKid to the beginning of theParent
theParent.insertBefore(theKid, theParent.firstChild);

theParent.firstChild даст нам ссылку на первый элемент внутри theParent и поставит перед ним theKid.

130
ответ дан Pat 25 August 2018 в 09:54
поделиться

Я добавил это в свой проект и, похоже, работает:

HTMLElement.prototype.prependHtml = function (element) {
    const div = document.createElement('div');
    div.innerHTML = element;
    this.insertBefore(div, this.firstChild);
};

HTMLElement.prototype.appendHtml = function (element) {
    const div = document.createElement('div');
    div.innerHTML = element;
    while (div.children.length > 0) {
        this.appendChild(div.children[0]);
    }
};

Пример:

document.body.prependHtml(`<a href="#">Hello World</a>`);
document.body.appendHtml(`<a href="#">Hello World</a>`);
1
ответ дан Raza 25 August 2018 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: