Как я могу получить доступ к подпунктам тега <svg: use> из javascript? - PullRequest
2 голосов
/ 07 октября 2009

У меня следующий код SVG на странице XHTML

<svg:svg>
<svg:svg width="450" heigth="450" viewBox="0 0 500 500">  
    <svg:defs>
        <svg:g id='mygroup'>
            <svg:circle id='a' cx="15" cy="15" r='15' fill="green" fill-opacity="0.3"/>
            <svg:line id='b' x1="15" y1="15" x2="15" y2="0" style="stroke: black;" />
        </svg:g>
</svg:defs>

<svg:rect width="400" height="400" fill="white" stroke="black" />
<svg:use id="g1" xlink:href="#mygroup" x="100" y="100" onclick="moveMe()" />
<svg:use id="g2" xlink:href="#mygroup" x="100" y="200" />
</svg:svg>

и я хотел бы изменить его следующим кодом javascript

<script><![CDATA[
    function moveMe(){
    obj = document.getElementById("g1");
    obj.setAttributeNS(null, "x", "200"); //Ok it works

    //How can I change the color of the a circle in g1? 
    obj = document.getElementById("g1.a");
    obj.setAttributeNS(null, "fill", "red"); //It doesn't work
    }
 ]]></script>

Как я могу изменить цвет круга 'a' в 'g1'? Как я могу получить к нему доступ из своего кода JavaScript?

РЕДАКТИРОВАТЬ: Если у меня есть 2-й элемент моей группы под названием g2, я не хочу менять его цвет.

Ответы [ 3 ]

1 голос
/ 08 октября 2009

Простое решение - передать цвет с помощью ключевого слова currentColor, например:

<svg:svg>
<svg:svg width="450" heigth="450" viewBox="0 0 500 500">  
<svg:defs>
    <svg:g id='mygroup'>
        <svg:circle id='a' cx="15" cy="15" r='15' fill="currentColor" fill-opacity="0.3"/>
        <svg:line id='b' x1="15" y1="15" x2="15" y2="0" style="stroke: black;" />
    </svg:g>
</svg:defs>

<svg:rect width="400" height="400" fill="white" stroke="black" />
<svg:use id="g1" xlink:href="#mygroup" x="100" y="100" onclick="moveMe()" color="green"/>
<svg:use id="g2" xlink:href="#mygroup" x="100" y="200" color="blue"/>
</svg:svg>

Если вы хотите изменить цвета, вы можете просто изменить атрибут 'color' в элементах 'use'. Или просто используйте CSS, например:

<style>
#g1:hover { color: lime }
</style>
1 голос
/ 07 октября 2009

Заменить

obj = document.getElementById("g1.a");

с

obj = document.getElementById("a");

, поскольку идентификатор элемента круга равен a , а не g1.a .

в document.getElementById (id)

id is a case-sensitive string representing the unique ID of the element 
being sought. 
0 голосов
/ 08 октября 2009

Вы можете достичь желаемого поведения, используя css.

Добавьте это к своей html-голове:

<style type="text/css">
   .g1red #a {fill:red}
</style>

используйте этот код скрипта:

<script><![CDATA[
function moveMe(){
obj = document.getElementById("g1");
obj.setAttributeNS(null, "x", "200");
obj.setAttributeNS(null, "class", "g1red");  
}
]]></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...