3

私はインライン svg を持っており、次の方法でこの要素を取得したいと考えています。

svgdoc.getElementById( 'someid' );

Firefox、Chrome では動作しますが、Opera では動作しません。結果はnullです。ページ (html5) はxhtml(content-type: application/xhtml+xml ) として配信され、html ルート要素には inline-svg (svg、inkscape、...) で作成されるすべての名前空間宣言が含まれます。ソースに直接投入。

したがって、html 要素は次のようになります。

<!DOCTYPE html>
<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">

含まれているsvgの頭は次のようになります。

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   version="1.1"
   width="581.75085"
   height="382"
   inkscape:version="0.48.3.1 r9886" >

宣言は<?xml ... ?>html-source で削除されます。

編集::

上記の説明には少し誤りがあります... SVG が ajax 応答のソースに注入され、それが element.innerHTML を介して dom に注入されます。この失敗を許してください!

ところで:getElementsByTagName()動作します。

console.log( svgdoc.getElementByID ) --> function getElementById(){ [native code] }

それは本当に奇妙です、これは何が原因でしょうか?

4

1 に答える 1