如何使用javascript更改脚本标记的内容?

如何使用javascript更改脚本标记的内容?,javascript,svg,pygal,Javascript,Svg,Pygal,我有一个使用pygal库生成的svg,我想更改svg内容的script标记中定义的数组的值。这就是我如何阅读svg svgContent = document.querySelector(".myChart").contentDocument // under <defs>, the second child contains the script tag. Used eval to parse the js content svgScriptContent =

我有一个使用
pygal
库生成的
svg
,我想更改
svg
内容的
script
标记中定义的数组的值。这就是我如何阅读
svg

svgContent = document.querySelector(".myChart").contentDocument
// under <defs>, the second child contains the script tag. Used eval to parse the js content
svgScriptContent = eval(svgContent.querySelector("defs").children[1].innerHTML)
我可以通过这样做来访问现有密钥的值

tooltipLegends = svgScriptContent.legends
console.log(tooltipLegends)
现在我想用另一个值数组替换这个数组,这就是我要做的

updatedTooltipLegends = ["var6", "var7", "var8", "var9", "var10"]  
svgScriptContent.legends = updatedTooltipLegends
但是
脚本
标记的内容不会得到更新。我做错了什么


另一个想法是,可以将内容读取为文本,并且可以使用
regex
替换数组,但不确定如何执行该操作,以及这是否是一个好主意。

脚本标记的内容是代码。当遇到
脚本
标记时,将执行该代码并创建一个对象(带有嵌套对象和数组)并将其分配给
window.pygal

您的代码读取
脚本的代码
并运行它,这几乎肯定是不必要的,而且可能是不需要的。代码大概已经运行了,并且在正确的上下文中运行(它看起来像是您的
。myChart
元素是
HTMLObjectElement
iframe
或类似元素,因为您使用了
contentDocument
)。相反,您的
eval
在您的窗口中运行,而不是在它似乎要运行的窗口中运行

而是修改代码最初创建的对象。代码将它放在运行它的窗口的
pygal
属性上,因此您应该能够执行以下操作:

document.querySelector(".myChart").contentWindow.pygal.config['f2a1b172-9f14-4f9a-aba9-eff7e05225a3'].legends = ["var6", "var7", "var8", "var9", "var10"];
如果您不知道将使用什么GUID,并且始终只有一个GUID,则可以执行以下操作:

const pygal = document.querySelector(".myChart").contentWindow.pygal;
pygal.config[Object.keys(pygal.config)[0]].legends = ["var6", "var7", "var8", "var9", "var10"];

嗨,谢谢你的回复。您的代码应该可以工作,但由于某些原因我没有定义。到目前为止,
document.querySelector(“.myChart”).contentWindow.pygal
,我得到了一个包含属性
图例的对象,但是使用您的完整代码
document.querySelector(.myChart”).contentWindow.pygal.图例,我得到了未定义的对象。知道为什么吗?@SouvikRay-我没有仔细观察,属性路径不仅仅是
图例
。我已经更新了上面的答案。我现在可以确认这是否有效,因为我在将图例设置为新数组之前执行了
console.log()
,在使用新数组设置图例之后执行了
console.log()
。最新的
console.log
显示更新的阵列。但是,当我在图表上检查元素并检查脚本标记中的图例值时,我发现它仍然没有使用最新的数组更新。那么为什么我的
console.log
会显示其他内容?@SouvikRay-这表明该值是在代码更新之前使用的。对不起,我不明白。你是说传说的更新有延迟吗?
document.querySelector(".myChart").contentWindow.pygal.config['f2a1b172-9f14-4f9a-aba9-eff7e05225a3'].legends = ["var6", "var7", "var8", "var9", "var10"];
const pygal = document.querySelector(".myChart").contentWindow.pygal;
pygal.config[Object.keys(pygal.config)[0]].legends = ["var6", "var7", "var8", "var9", "var10"];