【发布时间】:2016-06-07 06:15:13
【问题描述】:
我正在尝试通过单击事件更改“xlink:href”属性,到目前为止它部分工作。这就是我正在做的事情
HTML:
<a href="#" class="ui-btn ui-corner-all ui-shadow editIcon" data-iconpos="top" data-transition="none" style="text-align:center">
<svg class="icon icon-pencil">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-pencil"> </use>
</svg>
</a>
JS:
$('a.editIcon').on('click', function () {
if ($("a.editIcon svg").attr('class') == 'icon icon-pencil') {
$("a.editIcon svg").attr("class", "icon icon-floppy-disk");
$("a.editIcon svg use").attr("xlink:href", "#icon-floppy-disk");
} else {
myFunctionCall();
$("a.editIcon svg").attr("class", "icon icon-pencil");
$("a.editIcon svg use").attr("xlink:href", "#icon-pencil");
}
});
发生的事情是我能够毫无问题地更改类,但“xlink:href”属性没有改变,而是留下旧的(“#icon-pencil”),并添加一个新的“href”属性(href="#icon-floppy-disk"):
<svg class="icon icon-floppy-disk">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-pencil" href="#icon-floppy-disk"></use>
</svg>
我在这里缺少什么?谢谢!
【问题讨论】:
-
尝试在
:之前放置两个反斜杠:\\:或改用$('[xlink\\:href]')。 -
除非有插件,否则我认为 jQuery 不会让您设置命名空间属性。您可能需要使用原生 DOM 函数:
$("a.editIcon svg use").get(0).setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#icon-pencil'); -
感谢大家的帮助。实际上,@Dr. Molle 和@prodigitalson 具有相同的效果,它留下了
xlink:href="#icon-pencil" href="#icon-floppy-disk。我想我必须找到另一种方法,可能是 replaceWith() 并替换整个东西。
标签: javascript jquery html svg