Как я могу привязать SVG к объекту?

Google Chrome v60.0.3112.101, HTML5, jQuery 3.2.1

мой object элемент связан с svg-файл. это svg без проблем отображается на моей HTML-странице. Я пытаюсь получить svg элемент с jQuery, но он ничего не нашел для обеих моих попыток:

$('object').length; // 1
$('svg').length; // 0
$('object > svg').length; // 0

это мой кусок HTML:

<object type='text/svg+xml' data='svg/logo.svg'></object>

Как я могу получить мой svg с помощью jQuery?

PS Я использую этот метод (внешний svg-файл) потому что мой svg будет использоваться на многих веб-страницах. Также я использую object вместо img потому что svg использует внешний css-файл.

1 ответ

Вам нужно использовать contentDocument собственность <object> элемент. Это даст вам объект документа, который является родителем <svg> элемент. Тогда вы можете использовать documentElement свойство объекта документа, чтобы получить корневой элемент документа, который будет <svg> элемент.

var svg = $("object")[0].contentDocument.documentElement;

Чтобы визуализировать это:

#document
   <html>            (HTMLDocument)
      <object>       (HTMLObjectElement)   $("object")[0]
         #document   (HTMLDocument)        .contentDocument
            <svg>    (SVGSVGElement)       .documentElement

Но помните, что SVG не будет доступен, пока страница не загрузится. Так что вам нужно ждать окна onload событие.

$(window).on("load", function() {

  var svg = $("object")[0].contentDocument.documentElement;
  console.log("svg = ",svg);

});

Вы можете получить доступ к объекту, если добавите идентификатор

<object id="svg" type='text/svg+xml' data='svg/logo.svg'></object>

тогда вы можете запросить идентификатор, подобный этому

$('#svg')
Другие вопросы по тегам