Метод select() в библиотеке Snap.svg предназначен для
поиска и получения первого элемента SVG,
соответствующего заданному CSS-селектору. Это один из базовых
инструментов навигации по SVG-документу, позволяющий работать с уже
существующими элементами.
В отличие от создания новых элементов (circle(),
rect() и др.), select() используется для
доступа к элементам, которые уже находятся внутри
SVG-контейнера.
Snap.select(selector)
или как метод экземпляра:
paper.select(selector)
Параметры:
selector — строка, содержащая CSS-селекторВозвращаемое значение:
Snap.Element, если элемент найденnull, если совпадений нетМетод использует стандартные CSS-селекторы, аналогичные тем, что
применяются в querySelector в DOM:
"circle"".my-class""#my-id""g rect"Возвращается только первый найденный элемент, даже если селектор соответствует нескольким.
var paper = Snap("#svg");
var circle = paper.select("#myCircle");
circle.attr({ fill: "red" });
var rect = paper.select(".box");
rect.attr({ stroke: "black" });
var group = paper.select("g");
var innerRect = group.select("rect");
Snap.select() и paper.select()var el = Snap.select("#id");
document.querySelectorvar el = paper.select("#id");
После получения элемента можно использовать весь API Snap.svg:
var el = paper.select("#circle");
if (el) {
el.attr({
fill: "blue",
stroke: "black",
strokeWidth: 2
});
}
Проверка на null обязательна при работе с динамическими
структурами.
Метод поддерживает составные и вложенные селекторы:
var el = paper.select("g#group1 .item");
var el = paper.select("svg > g > circle");
Это позволяет точно находить элементы в сложных SVG-структурах.
selectAll())var el = paper.select("#unknown");
el.attr({ fill: "red" }); // Ошибка!
Решение:
if (el) {
el.attr({ fill: "red" });
}
Если SVG загружается асинхронно, элемент может быть ещё недоступен.
paper.select("myCircle"); // Ошибка — нужен #myCircle
Метод select() работает поверх DOM, но возвращает
обёртку Snap.svg, а не нативный DOM-элемент.
Для доступа к оригинальному элементу:
var el = paper.select("#id");
var domNode = el.node;
var el = paper.select("#circle");
el.animate({
r: 50
}, 1000);
var el = paper.select("#rect");
el.click(function() {
this.attr({ fill: "green" });
});
Изменение существующей графики:
paper.select("#logo").attr({ opacity: 0.5 });
Динамическое взаимодействие:
paper.selectAll(".button").forEach(function(btn) {
btn.hover(function() {
this.attr({ fill: "orange" });
});
});
Работа с группами:
var group = paper.select("#icons");
var icon = group.select("path");
selectAll()| Метод | Возвращает | Назначение |
|---|---|---|
select() |
Один элемент | Первый найденный |
selectAll() |
Коллекцию элементов | Все совпадающие |
paper.select() предпочтительнее
глобального поискаvar circle = paper.select("#circle");
// использовать повторно
circle.attr({ fill: "red" });
circle.animate({ r: 40 }, 500);
Под капотом Snap.svg делегирует поиск в DOM через
querySelector, после чего оборачивает найденный элемент в
объект Snap.Element. Это обеспечивает совместимость с API
библиотеки и расширяет возможности работы с SVG.
Метод select() является ключевым инструментом для:
Он связывает декларативную SVG-разметку с императивной логикой JavaScript, обеспечивая гибкость и управляемость графикой.