私はインライン 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] }
それは本当に奇妙です、これは何が原因でしょうか?