Один из способов - добавить элемент g
и добавить в него другие элементы.
$("path").click(function() {
var $svg = $("#mysvg"); // #mysvg is SVG doc
var g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
g.setAttribute("id", "g");
$svg.append($(g));
$svg.find("path").each(function() {
$(this).css("stroke", "red").appendTo($(g));
});
$("#cont").html($svg); // #cont is svg "container", eg. div
});
Рабочий пример: http://jsbin.com/ayulaq/2
Он использует jQuery для упрощения операций DOM.Я использовал эту технику, чтобы добавить все дочерние элементы в SVG в одну родительскую группу, чтобы упростить (и ускорить) определение фактического размера ограничивающего прямоугольника всех элементов.Иногда документы SVG не объясняют ширину и высоту корневого элемента SVG, или это неправильно, и чтобы изменить размер документа SVG (или изменить размер вновь созданного элемента g [и так долго, пока все его дети], чтобы он соответствовал документу SVG), мы должны получить bboxкоторый охватывает все элементы.После приведенного выше кода мы можем вызвать $("#g")[0].getBBox()
, чтобы получить размер всех элементов в SVG doc.Существует также этот способ, если размер имеет значение только: var setti = p.set(); setti.push(path1,path2); console.log(setti.getBBox());
, но set
подходит не во всех случаях.
Эта технология применяется также к перетаскиванию, чтобы ускорить перетаскивание больших наборов элементов.Вместо использования set
Рафаэля, который изменяет атрибут преобразования каждого объекта в наборе индивидуально, вместо этого достаточно использовать g
, достаточно изменить атрибут преобразования элемента g
.
Конечно, это относится только к случаямБэкэнд SVG используется в Raphael.