如何在 DOM 中设置一个 JSON 文字的属性值
How do you set an attribute value that is a JSON literal within a DOM
我正在尝试在标签中包含的 JSON 文字中设置键值的值,例如,在数据信息下方的代码段中是 JSON 文字.
<video
id="myPlayer_1"
width="90%"
poster="videos/posters/NoVideoPoster.png"
data-info="{"start_time": "71522", "end_time":"71622", next_video:"0"}">
</video>
现在我可以使用以下代码读取属性:
var ar = JSON.parse(videoElement.getAttribute("data-info"))
console.log("next video" + ar.next-_video);
但事实证明设置它很困难,例如:
videoElement.setAttribute("data-info.next_video", "1");
产生:
<video
id="myPlayer_1"
width="90%"
poster="videos/posters/NoVideoPoster.png"
data-info="{"start_time": "71522", "end_time":"71622",next_video: "0"}"
data-info.next_video = "1">
</video>
这显然是不正确的。有人可以帮忙吗?
您必须设置 whole 属性。对于 DOM,请记住,它只是一个字符串。
例如,在阅读并解析之后:
var ar = JSON.parse(videoElement.getAttribute("data-info"))
您可以更新它并通过转换回 JSON(字符串)再次设置它:
ar["next-video"] = 1;
videoElement.setAttribute("data-info", JSON.stringify(ar));
如果您控制元素并且只需要更新部分信息,您可以考虑单独的 data-*
属性,而不是包含 JSON 的单个属性。例如:
<video
id="myPlayer_1"
width="90%"
poster="videos/posters/NoVideoPoster.png"
data-start-time=71522
data-end-time=71622
data-next-video=0
></video>
那么更新“下一个视频”是:
videoElement.dataset.nextVideo = "1";
请注意 dataset
如何将 data-next-video
转换为 nextVideo
。查看详情on MDN.
而不是
videoElement.setAttribute("data-info.next_video", "1");
你应该这样做
var ar = JSON.parse(videoElement.getAttribute("data-info"))
ar.next_video = "1";
videoElement.setAttribute("data-info", JSON.stringify(ar));
我正在尝试在标签中包含的 JSON 文字中设置键值的值,例如,在数据信息下方的代码段中是 JSON 文字.
<video
id="myPlayer_1"
width="90%"
poster="videos/posters/NoVideoPoster.png"
data-info="{"start_time": "71522", "end_time":"71622", next_video:"0"}">
</video>
现在我可以使用以下代码读取属性:
var ar = JSON.parse(videoElement.getAttribute("data-info"))
console.log("next video" + ar.next-_video);
但事实证明设置它很困难,例如:
videoElement.setAttribute("data-info.next_video", "1");
产生:
<video
id="myPlayer_1"
width="90%"
poster="videos/posters/NoVideoPoster.png"
data-info="{"start_time": "71522", "end_time":"71622",next_video: "0"}"
data-info.next_video = "1">
</video>
这显然是不正确的。有人可以帮忙吗?
您必须设置 whole 属性。对于 DOM,请记住,它只是一个字符串。
例如,在阅读并解析之后:
var ar = JSON.parse(videoElement.getAttribute("data-info"))
您可以更新它并通过转换回 JSON(字符串)再次设置它:
ar["next-video"] = 1;
videoElement.setAttribute("data-info", JSON.stringify(ar));
如果您控制元素并且只需要更新部分信息,您可以考虑单独的 data-*
属性,而不是包含 JSON 的单个属性。例如:
<video
id="myPlayer_1"
width="90%"
poster="videos/posters/NoVideoPoster.png"
data-start-time=71522
data-end-time=71622
data-next-video=0
></video>
那么更新“下一个视频”是:
videoElement.dataset.nextVideo = "1";
请注意 dataset
如何将 data-next-video
转换为 nextVideo
。查看详情on MDN.
而不是
videoElement.setAttribute("data-info.next_video", "1");
你应该这样做
var ar = JSON.parse(videoElement.getAttribute("data-info"))
ar.next_video = "1";
videoElement.setAttribute("data-info", JSON.stringify(ar));