2013-03-05 81 views
1

我一直在谷歌搜索,并试图找出如何做到这一点,但我什么都没有提出。 如何访问SVG中的JavaScript变量?在SVG中访问JavaScript变量? SVG中的当前时间

我正在使用SVG编写的界面,但我需要获取当前日期和时间,格式化并显示它。

我想

<text id="epgDate" x="1130" class="epg-date text" text-anchor="end" width="180"> 

    <script type="text/javascript"><![CDATA[ 
    setInterval(currentDate, 1000); 
    ]]></script> 

</text> 
<text id="epgTime" x="1170" class="epg-time text"> 

    <script type="text/javascript"><![CDATA[ 
    setInterval(currentTime, 1000); 
    ]]></script> 

</text> 

用 “的currentdate()” 和 “currentTime的()” 别处定义。

这给了我一些语法错误的形式(我使用客户端的模拟器工具来运行这个接口,所以它没有告诉我更具体的东西)。 编辑 语法错误是其他地方,它是固定的。 但是,这仍然不起作用。即使当我尝试使用诸如“alert('x')”或“document.write('x')”的简单函数时。

是否有人知道如何获取SVG中的当前日期时间,或者无法在JavaScript中获取它并使用setInterval()定期回显它?

非常感谢任何帮助提前!

+0

请提供一个简单,独立的测试文件,充分再现您的问题。 Web浏览器中的SVG可以完全访问JavaScript对象和方法,并与该页面共享同一个全局“窗口”对象。如果您无法亲自托管测试文件,请尝试使用http://jsfiddle.net/。 – Phrogz 2013-03-05 05:50:10

回答

0

所以看来,我遇到的困惑是SVG和HTML标记页面之间的区别。 SVG使用稍微不同的DOM,因此访问/设置元素并不总是以完全相同的方式工作或使用相同的方法。

我写这个剧本,我能来设置SVG绘制日期和时间元素日期时间:

<script type="text/ecmascript"><![CDATA[ 

       // Format Date 
       var date = new Date(); 
       var month = date.getMonth() + 1; 
       var day = date.getDate(); 
       var year = date.getFullYear(); 

       var monthsByName = ["January", "February", "March",  "April", "May", "June", "July", 
        "August","September", "October", "November", "December"]; 

       var formattedDate = monthsByName[month - 1] + " " + day + ", " + year; 

       var textNode = document.createTextNode(formattedDate); 
       document.getElementById("epg-date").appendChild(textNode); 

       // Format Time 
        // Source: bbrame @ StackOverflow 
       var hours = date.getHours(); 
       var minutes = date.getMinutes(); 
       var ampm = hours >= 12 ? 'PM' : 'AM'; 
       hours = hours % 12; 
       hours = hours ? hours : 12; 
       minutes = minutes < 10 ? "0"+minutes : minutes; 

       var formattedTime = hours + ':' + minutes + ' ' + ampm; 

       var timeNode = document.createTextNode(formattedTime); 
       document.getElementById("epg-time").appendChild(timeNode); 

      ]]></script>