2014-09-02 2 views
2

Например:D3.js - Является ли «svg:» в «svg: rect» обязательным?

svg.append("svg:rect"); 
  1. Что делать, если я бросаю "SVG:"? Кажется, это работает без «svg:». Какие-либо потенциальные проблемы для его удаления?
  2. "svg:" a d3 специфическая вещь или обычно требуется, когда используются элементы svg ?

ответ

3

Из d3.js append() documentation

Имя может быть задано либо в виде постоянной строки или как функция, которая возвращает элемент DOM, добавляемых. Когда имя указано как строка, оно может иметь префикс пространства имен формы «namespace: tag». Например, «svg: text» создаст элемент «text» в пространстве имен SVG. По умолчанию D3 поддерживает пространства имен svg, xhtml, xlink, xml и xmlns. Дополнительные пространства имен можно зарегистрировать, добавив в d3.ns.prefix. Если пространство имен не указано, пространство имен будет унаследовано от охватывающего элемента; или, если имя является одним из известных префиксов, будет использоваться соответствующее пространство имен (например, «svg» означает «svg: svg»).

Так что пространства имен (в большинстве случаев) являются необязательными, так как this совершить.

1

Часть svg: определяет пространство имен, которое будет использоваться для элемента. В частности, svg:rect означает, что rect следует интерпретировать в пространстве имен SVG. Это актуально, потому что не все типы элементов существуют во всех пространствах имен (например, HTML не содержит rect s).

Обычно не нужно указывать это в последних версиях D3, поскольку пространство имен получено из контекста. В некоторых случаях вам нужно указать, чтобы документ правильно интерпретировался. Примечательным примером является использование foreignObject в SVG, что позволяет вставлять содержимое без SVG, см. this example. Здесь необходимо указать xhtml как пространство имен для присоединенного элемента body, поскольку контекст является SVG, и он будет интерпретироваться неправильно.

Смежные вопросы