D3.js prepend (подібно до jQuery prepend)


75

Мені подобається використання append у D3, і я шукаю prepend.

Чи існує це в D3?

Відповіді:


126

Можна використовувати

selection.insert(newElement[, anotherExistingElement])

Наприклад:

selection.insert("div",":first-child")

Наведений вище код вставить a divперед першим дочірнім елементом вибраного елемента. Перевірте документацію, щоб дізнатись більше.

Інший можливий спосіб вставки елементів перед будь-яким вузлом (включаючи звичайні тексти):

var parentEl = d3.select("div").node();
parentEl.insertBefore(document.createElement("div"), parentEl.childNodes[0]);
<script src="https://d3js.org/d3.v3.min.js"></script>
<div>
  This is a plain text
  <a></a>
</div>


16
Однак це не буде вставлено перед будь-яким простим текстом у вузлі /
Адам Толлі,

1
Документація перенесена сюди: github.com/d3/d3-selection/blob/master/…
mjaskowski

@AdamTolley будь-яка пропозиція щодо того, як вставити текст тексту до плану?
Shruggie,

1
@ben Я додав можливе рішення у відповіді. Сподіваюся, це допоможе.
Gilsha

12

Selection.lower ()

selection.lower() розмістить елемент як першу дочірню історію свого батька.

Разом з d3 в Append , selection.append().lower()може повторити JQuery - х PREPEND

Оскільки D3 v4 +, D3 має обидва selection.raise()іselection.lower() методи . Вони використовуються найчастіше для переміщення елементів у SVG, так що певні елементи з’являються поверх інших, де впорядкування елементів SVG у DOM визначає порядок малювання. Але їх можна використовувати для будь-якого елемента в DOM.

Ось коротка демонстрація використання div та абзаців:

Фрагмент приймає div із таким вмістом:

Text
<p> Child Paragraph </p>

І використовує d3, щоб додати новий абзац, а потім опустити його так, щоб структура була такою:

<p>Inserted</p>
Text
<p> Child Paragraph </p>

І для порівняння з jQuery's prepend:

Більше інформації

Selection.lower () реалізований як такий (див. Документи для отримання додаткової інформації):

selection.each(function() {
  this.parentNode.insertBefore(this, this.parentNode.firstChild);
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.