在 Magoo 先生的评论中进行了更多研究后,您无法与由 JS 创建和/或由 JS 修改的 DOM 进行交互。为了解决这个问题,您可以创建一个 JS 函数来返回您的数据。所以我创建了一个帮助方法,它返回我的数据的 JSON 字符串。然后我从我的 Blazor 代码中调用该 JS 并使用 Newtonsoft 对其进行反序列化。d3 代码可以很容易地更改为 vanilla javascript 或 JQuery 以获取 DOM 元素值/innerHTML。
Blazor 代码
var data = await JsRuntime.InvokeAsync<string>("JsInteropFunc", null);
dataDto = Newtonsoft.Json.JsonConvert.DeserializeObject<DataObjectDto>
(data);
Javascript 代码,本例使用 d3 获取具有类名的 DOM 元素以获取 DOM 元素的文本:
window.JsInteropFunc = function() {
function cleanStr(data){
return data.replace("$","").replace(",","").replace("%","");
}
return '{ totalSales: "' + cleanStr(d3.select(".totalSales").text()) + '"' +
', annualSales: "' + cleanStr(d3.select(".annualSales").text()) + '"' +
', profitMargin: "' + cleanStr(d3.select(".profitMargin").text()) + '"' +
'}' ;
},