You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SVG路径点击后更新已有DIV内容而非新增DIV的实现疑问

问题:点击SVG Path时更新DIV内容而非新增DIV

我实现了点击SVG中的path元素创建DIV的功能,但每次点击不同path时都会新增一个DIV,而非更新已创建DIV内的信息。希望能改成点击新path时直接更新DIV内的信息,或者退一步关闭旧DIV再创建新的。

原JavaScript代码

var fakeObject = {"One": {"givenName": "Joshua"}, "Two": {"givenName": "James"}}

console.log(fakeObject)

$("path").on("click", function(e){
    var pathID = e.target.id.split('_');
    console.log(pathID)
    createDiv(pathID[1]);
});

function createDiv(value){
    $("#DOM").append(`
    <div>
        <p>${fakeObject[value].givenName}</p>
    </div>
  `)
}

原HTML代码

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <path id ="Path_One" d="M10,60 L50,10 90,60" />
  <path id="Path_Two" d="M20,30 L10,130 20,30" />
</svg>
<div id="DOM">
  <p>
    This is a test div
  </p>
</div>

方案一:直接更新已有内容(推荐)

这种方式不需要重复创建DIV,只更新内容,效率更高。有两种实现方式:

方式1:保留原有内容,更新新增的展示容器

适合需要保留#DOM里原有测试文本的场景:

var fakeObject = {"One": {"givenName": "Joshua"}, "Two": {"givenName": "James"}}

$("path").on("click", function(e){
    var pathID = e.target.id.split('_');
    updateDivContent(pathID[1]);
});

function updateDivContent(value){
    // 检查是否存在用于展示的容器,不存在则创建
    var contentContainer = $("#DOM .name-container");
    if (contentContainer.length === 0) {
        $("#DOM").append('<div class="name-container"><p></p></div>');
        contentContainer = $("#DOM .name-container");
    }
    // 更新内容
    contentContainer.find("p").text(fakeObject[value].givenName);
}

方式2:直接替换#DOM的全部内容

如果不需要保留原有测试文本,可以直接用html()方法替换整个容器内容:

var fakeObject = {"One": {"givenName": "Joshua"}, "Two": {"givenName": "James"}}

$("path").on("click", function(e){
    var pathID = e.target.id.split('_');
    // 直接替换#DOM内的所有内容
    $("#DOM").html(`<div><p>${fakeObject[pathID[1]].givenName}</p></div>`);
});

方案二:清空旧DIV后创建新的

如果需要先清空原有内容再创建新DIV,只需修改createDiv函数,先调用empty()清空容器再添加新元素:

var fakeObject = {"One": {"givenName": "Joshua"}, "Two": {"givenName": "James"}}

$("path").on("click", function(e){
    var pathID = e.target.id.split('_');
    createDiv(pathID[1]);
});

function createDiv(value){
    // 先清空容器内容,再添加新DIV
    $("#DOM").empty().append(`
    <div>
        <p>${fakeObject[value].givenName}</p>
    </div>
  `)
}

内容的提问来源于stack exchange,提问作者JayPee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:05:42