1

私が持っているsvgドキュメントで動作するようにいくつかの基本的なecmaスクリプトを取得しようとしています。

<svg contentScriptType="text/ecmascript" width="957px"
     xmlns:xlink="http://www.w3.org/1999/xlink" zoomAndPan="magnify"
     contentStyleType="text/css" viewBox="-2998 -1920 6580 5780" height="841px"
     preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg"
     version="1.1" onload="init(evt)"">

<script type = "text/ecmascript">
    <![CDATA[
        function init(evt) {
            if (window.svgDocument == null) {
                svgDoc = evt.target.ownerDocument;
            }
        }

        function displayName(name) {
            svgDoc.getElementById("node_name").firstChild.data = name;
        }
    ]]> </script>

<text class = "label" id = "node_name" x="10" y="390"></text>

<circle fill-opacity="0.2" fill="#3ccb5d" r="40.0" cx="1568.2628"
class="46960" cy="-1518.6278" stroke="#000000"
stroke-opacity="0.5" stroke-width="1.0" 
onmouseover="displayName('Showing Nodes')"/>
</svg>

ただし、何らかの理由で、サークルからdisplayNameイベントを発生させようとすると、svgタグの最後の行に「Cannotset property "data" ofnull」が表示されます(onload = "init(evt)")、理由はよくわかりません。考え?

4

2 に答える 2

1

実際にはtextContentを使用する必要があります。これは、ノードに子があるかどうかに関係なく機能します。

function displayName(name) {
    svgDoc.getElementById("node_name").textContent = name;
}
于 2012-08-17T14:48:00.460 に答える
0

さて、私はこれに対する答えをなんとか理解することができましたが、それは私が本当にここに投稿する必要があるように感じるほど直感に反しています。どうやらこれが機能しない理由は、テキストタグの間に何もない場合、そのデータは単に空ではなくnullとして扱われるためです。

Broken Code:    
    <text class = "label" id = "node_name" x="10" y="390"></text>
    getElementById('node_name').firstChild == null

Working Code:
    <text class = "label" id = "node_name" x="10" y="390"> </text>
    getElementById('node_name').firstChild == " "
于 2012-08-17T14:38:15.357 に答える