我实际上正在制作一个侧边栏小工具(基于 AJAX),并且我正在寻找一种从 AJAX 请求中提取单个元素的方法。
我发现的唯一方法就是做类似的事情:
var temp = document.createElement("div");
temp.innerHTML = HttpRequest.innerText;
document.body.appendChild(temp);
temp.innerHTML = document.getElementByID("WantedElement").innerText;
但是它非常丑陋,我想直接从请求中提取 WantedElement 而不将其添加到实际文档中...
谢谢!
最佳答案
如果您可以控制数据,那么您的做法可能是最好的方法。这里的其他答案都有其优点,但也都存在相当大的缺陷。例如,querySelector()
方法仅适用于在主机上以 IE8 模式运行的 Windows 桌面小工具。正则表达式对于解析 HTML 特别不可靠,不应使用。
如果您无法控制数据或者数据不是通过安全协议(protocol)传输,则您应该更关心安全性而不是代码美观 - 您可能会给小工具和主机带来潜在的安全风险机器通过将未经净化的 HTML 插入到文档中。由于小工具以用户或管理员级别权限运行,因此明显的安全风险是不受信任的源/MITM脚本注入(inject),为恶意脚本留下漏洞,对其运行的计算机造成严重破坏。
一个潜在的解决方案是使用 htmlfile
ActiveXObject:
function getElementFromResponse(divId)
{
var h = new ActiveXObject("htmlfile");
h.open();
// disable activex controls
h.parentWindow.ActiveXObject = function () {};
// write the html to the document
h.write(html);
h.close();
return h.getElementById("divID").innerText;
}
您还可以使用 IE8 的 toStaticHTML()
方法,但您的小工具需要在 IE8 模式下运行。
关于javascript - 从 XMLHttpRequest 中提取单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2614330/