2013-03-05 43 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>